スポンサーリンク

grepの-oオプションで検索にマッチした部分のみ出力

※MACターミナル(BSD系)での動作確認です。

grepの-oオプションの使い方

grepの-oオプションで検索にマッチした部分のみ出力することができます。

例えば、下記のin.txtがあったとします。

 $ cat in.txt 
string001awk
string002ls
string003grep
string004sed
string005find
string006cat

例えば、下記のように、-oオプションを付けて、正規表現で"00[0-9]"を検索します。
"00[0-9]"は、1文字目は0、2文字目は0、そして3文字目は0〜9の数字のいずれかを意味しています。
 $ grep -o "00[0-9]" in.txt 
 

下記が実行結果になります。マッチした部分のみ出力されているのが確認できます。
 $ grep -o "00[0-9]" in.txt 
001
002
003
004
005
006

スポンサーリンク

grepの結果を配列に格納して処理

-oオプションで指定したgrepの結果を配列に格納して処理する場合もあるかと思います。
参考記事:grepで検索された行を配列に格納する方法

下記がサンプルコードになります。

grepの結果を配列に格納して、最後にforループ処理して、配列の中身をechoで出力しています。

 $ cat sample.sh 
#!/bin/sh

array=($(grep -o "00[0-9]" in.txt))

for i in ${array[@]}
do
	echo $i
done

下記が実行結果になります。
 $ ./sample.sh 
001
002
003
004
005
006

Pythonを使って実現

同様のことをPythonでもできます。ただ少々コード量が多くなります。

参考:[Python]正規表現でファイルを検索して、マッチした複数文字列を取得

スポンサーリンク