以下を含む各行から一意の文字列を抽出します。

以下を含む各行から一意の文字列を抽出します。

以下は、ファイルのテキストブロックの例です。


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

説明する:

  1. grepis the行のどの部分にも「」を含むすべての行を取得します。
  2. sed:「前と後」の;すべての項目を削除します。 (sed -e 's/.*blah://' -e 's/;.*//'理解を助けるためにこれを使用できます。)
  3. sortソートライン

関連情報