パターンのドットを含む Grep のフルネーム

パターンのドットを含む Grep のフルネーム

私は完全な単語をgrepしたいと思います。

私がファイルを持っているようにtest.txt

ファイルのデータ:

Abc  ABC.xyz abc ABC.xyz 
Def  DEF.mno def DEF.mno

私が使用するとき、grep -o私の出力は次のようになります。

grep -o "\w*ABC\w*" test.txt

出力:ABC

完全な言葉が欲しいABC.xyz

答え1

問題は、これが\w「単語文字」([a-zA-Z0-9_])を意味し、.決して単語の一部ではないということです。

 $ echo . | grep '\w'
 $ 

空白ではなく空白のみを検索できます。

$ echo ABC.xyz | grep '\S*ABC\S*'
ABC.xyz

これは\S普遍的に理解されないかもしれません。実装でうまくいかない場合は、代わりに使用してくださいgrep -E

答え2

awk '/ABC/ { print $NF }' test.txt

awkこれは、文字列をABC各行の内容と一致させるために使用されます。行が一致すると、スペースで区切られた最後の単語が出力されます。

行の最初のフィールドと一致させるには、代わりに$1 ~ /Abc/を使用します/ABC/。最初のフィールドと文字列比較を実行するには、を使用します$1 == "Abc"

コマンドラインで比較する文字列を渡すには、次のようにします。

awk -v str="Abc" '$1 == str { print $NF }' test.txt

コマンドラインで比較するパターンを渡すには、次を使用します。

awk -v pat="ABC" '$1 ~ pat { print $NF }' test.txt

ライン全体と比較する$1ように変更します。$0


独自の方法を使用しgrep、ファイル名のサフィックス(存在する場合)がわからないとし、GNUを使用しますgrep

grep -o '\<ABC\.\w*\>' test.txt

\<単語の始まりと一致し、\>単語の終わりと一致します。

これはあなたに与えるでしょう二つ ABC.txtしかし、最初の行に2回現れるからです。

GNU以外の実装では、代わりにgrep使用できます(GNUでも機能します)。[_[:alnum:]]\wgrep

関連情報