スペース間の完全な単語を見つける方法

スペース間の完全な単語を見つける方法

たとえば、次のような文字列があります1341 5415 fdad

コマンドはgrep -E "(^|\s)[1-9]{1,5}($|\s)" -o提供しますが、合計を取得1341したいと思います。13415415

どうすればいいですか?

答え1

echo '1341 5415 fdad' | grep -E -o '\b[1-9]{1,5}\b'

出力:

1341話
5415

-E:PATTERNSを拡張正規表現として解釈します。

-o:一致する行の一致する(空でない)部分のみを印刷し、各部分は別々の出力行に表示します。

\b:幅0の単語境界

答え2

あなたが得る実際の一致は末尾のスペースがある1341␣ことです。 grep は重なり合う一致を見つけないので、最初の一致がその空間を占める場合、パターンは残りの行で再び一致しません。ただし、入力がある場合、123 456 7892 つの文字列と123␣一致␣789します。

使いやすくなりますgrep -w

-w--word-regexp
単語全体を構成する一致を含む行のみを選択します。テストでは、一致する部分文字列が行の先頭にあるか、単語を作成しない文字が前にある必要があります。

$ echo '1341 5415 fdad' |  grep -wE "[1-9]{1,5}" -o
1341
5415

または、次のようにgrepして、すべてのスペースを2倍に増やすこともできます。

$ echo '1341 5415 fdad' | sed -e 's/ /  /g' | grep -E "(^|\s)[1-9]{1,5}($|\s)" -o
1341 
 5415 

(またはsed -e 's/\s/ /g'sedで動作する場合)

末尾のスペース1341と先行スペースのある行は5415一致の一部です。

答え3

1つの方法は、すべてのスペースを改行に変更してから、それを使用して式にgrep -x正確に一致する行を選択することです。

$ echo '1341 5415 fdad' | tr -s '[:space:]' '[\n*]' | grep -xE -e '[1-9]{1,5}'
1341
5415

関連情報