シェルスクリプトの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