以下は、ファイルのテキストブロックの例です。
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:1; to come to the aid
Now is the time for all blah:10; to come to the aid
Go to your happy place blah:100; to come to the aid
Go to your happy place blah:4321; to come to the aid
Go to your happy place blah:4321; to come to the aid
Now is the time for all blah:4321; to come to the aid
Now is the time for all blah:9876; to come to the aid
Now is the time for all blah:108636; to come to the aid
Now is the time for all blah:1194996; to come to the aid
Q:「is the」を含む行からすべての一意の番号を抽出する方法は?
'を使ってみましたgrep -o -P -u '(?<=blah:).*(?=;)
が、セミコロンが好きではありません。
答え1
\K
ちょうど一致したものを忘れるための指示を探しています。
grep -oP 'is the.*?blah:\K\d+'
それからsort -u
答え2
使用sed
:
$ sed -n '/is the/s/^.*blah:\([0-9]*\);.*$/\1/p' file | sort -u
1
10
108636
1194996
4321
9876
is the
置換は、文字列を含むすべての行の内容をとの間の数字で置き換えます。この文字列を含まない行は無視されます。blah:
;
答え3
cat file | grep "is the" | awk -F':' '{print $2}'|awk -F';' '{print $1}'|sort -u
答え4
この試み:
grep "is the" file | sed 's/.*blah://;s/;.*//' | sort -u
説明する:
grep
is the
行のどの部分にも「」を含むすべての行を取得します。sed
:
「前と後」の;
すべての項目を削除します。 (sed -e 's/.*blah://' -e 's/;.*//'
理解を助けるためにこれを使用できます。)sort
ソートライン