私は完全な単語を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:]]
\w
grep