シェルは部分パターンに一致する完全な単語を抽出します。

シェルは部分パターンに一致する完全な単語を抽出します。

シェルスクリプトの1行から単語を抽出する必要があります。同様の例を見たことがありますが、そのうち何も機能しませんでした。

例を見てください

word1 word2 word3/pattern/word4.word5 word6

両側にスペースをpattern返すべきではないことを考えると。word3/pattern/word4.word5

また、行が特定の文字で始まることを制限する必要があります#

行を分離するgrepコマンドが見つかりました。

grep "^[^#].*pattern" $FILE

で始まらずにを#含むすべての行を返しますpattern。それでは、この行からこの単語をどのように抽出できますか?

編集:Ubuntu 20.04を使う

また、この文に関連して、この例はそれがすべきものとある程度関連しています。このパターンは 1 行に 1 回だけ発生し、他の単語とスペースで区切られます。 1行が与えられたら、パターンを含む単語を返し、スペース(スペースを除く)に会うまですべてを左右に移動したいと思います。

ベストアンサー1

パターンがスペースと一致しない限り、これをgrep -o '[^[:space:]]*pattern[^[:space:]]*'行う必要があります。 ([^[:space:]]*空白以外の文字と一致します。)

正規表現エンジンは通常、一番左の位置から始まり、一致を探し、一致は欲です。つまり、できるだけ多くの文字列と一致します。したがって、パターンの両側にスペース以外のすべてのスペースをここで選択する必要があります。

ハッシュ記号で始まる行を無視するには、パイプを使用してくださいgrep -v "^#"

たとえば、次のようなhello.txt場合

# my pattern
word1 word2 word3/pattern/word4.word5 word6

それから:

% < hello.txt grep -v "^#" | grep -o '[^[:space:]]*pattern[^[:space:]]*'
word3/pattern/word4.word5

おすすめ記事