Grep パターンと次の単語

Grep パターンと次の単語

次の行を含むテキストファイルがあります(最後の2つの文字列のみが重要です)。

1 sometext Pattern
2 sometext Pattern  5Asda5}  
3 sometext Pattern asd2-asd  
4 sometext Pattern a-d
5 sometext Pattern   foobar  
6 sometext Pattern {asd  
7 Pattern Pattern something 123asd  
8 Pattern sometext asd    
9 Pattern 5h{1,2}b

最後の単語として「Pattern」を含むすべての行を見つける必要があります。この場合、単語は文字とハイフンを含む文字列として定義されます。文字列の後に先行スペースがある場合があります(例:Pattern¥t¥t¥t¥t¥t$)。

これに対する私の見解は次のとおりです。

egrep  '(\bPattern\b +[^a-zA-Z\-]{2,} *$)|(\bPattern\b *$)' file.txt 

後にスペースが続くパターンがあるすべての行と、最後に「単語」ではなくパターンまたはパターンがある行を探します。しかし、最初の部分は期待どおりに機能しません。単語以外のものを見つけるための別の方法が必要です。

残りの行の代わりに1、2、3、6、9行をgrepする方法を教えてください。私はawkを授業時間に扱わないので遠くにしたいと思います。

ベストアンサー1

\bこれをサポートする実装では、単語文字(数字と下線)と単語以外の文字(またはその逆)の間のgrep変換に使用されます。たとえば、\bPattern\b一致します。foo-Pattern.bar

スペースを区別して探している場合模様一言で言うことはできません\b

Patternここでは、文字以外の文字を含むゼロ個以上のスペースで区切られた文字列のリストが、次のスペース区切り文字を探しているようです-。したがって、次のようになります。

non_word='([^[:blank:]]*[^[:blank:][:alpha:]-][^[:blank:]]*)'
grep -E "(^|[[:blank:]])Pattern([[:blank:]]+$non_word)*[[:blank:]]*$"

おすすめ記事