teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

+correction

2021/02/18 09:18

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -19,4 +19,5 @@
19
19
  マッチしたものを全部出力したい場合:
20
20
 
21
21
  ```
22
- echo '{色="赤",名前="りんご",味="おいしい"}{名前="みかん",色="橙",味="おいしい"}{味="まずい",色="茶色",名前="りんご"}' | perl -CSD -Mutf8 -nle 'print foreach /名前="(.*?)"/g'
22
+ echo '{色="赤",名前="りんご",味="おいしい"}{名前="みかん",色="橙",味="おいしい"}{味="まずい",色="茶色",名前="りんご"}' | perl -CSD -Mutf8 -nle 'print foreach /名前="(.*?)"/g'
23
+ ```

2

追記

2021/02/18 09:18

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -7,4 +7,16 @@
7
7
 
8
8
  ```
9
9
  echo '{色="赤",名前="りんご",味="おいしい"}{名前="みかん",色="橙",味="おいしい"}{味="まずい",色="茶色",名前="りんご"}' | grep -P -o '(?<=名前=\")[^\"]*(?=")'
10
- ```
10
+ ```
11
+
12
+ この方法だとマッチした部分が複数あった場合全部の部分文字列を1行1文字列で出力するので、先頭以外要らないのであれば、sedかheadでフィルタリングすれば良いでしょう。
13
+
14
+ これ以上の凝った処理に発展する可能性があるなら、最初からperlで処理するのが賢いでしょう。
15
+
16
+ ```
17
+ echo '{色="赤",名前="りんご",味="おいしい"}{名前="みかん",色="橙",味="おいしい"}{味="まずい",色="茶色",名前="りんご"}' | perl -CSD -Mutf8 -nle '/名前="(.*?)"/ and print $1'
18
+ ```
19
+ マッチしたものを全部出力したい場合:
20
+
21
+ ```
22
+ echo '{色="赤",名前="りんご",味="おいしい"}{名前="みかん",色="橙",味="おいしい"}{味="まずい",色="茶色",名前="りんご"}' | perl -CSD -Mutf8 -nle 'print foreach /名前="(.*?)"/g'

1

ミス修正

2021/02/18 09:17

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  GNU grepではないgrepで、
2
2
 
3
3
  * 指定した正規表現にマッチした部分だけを出力するオプション`o`
4
- * 先読み言明・あと黄泉ゲン名を含むperl拡張正規表現を理解するようにするオプション`P`
4
+ * 先読み言明・あと読み言明を含むperl拡張正規表現を理解するようにするオプション`P`
5
5
 
6
6
  を併用すれば良さそうです。
7
7