grepを使用して完全に一致する文字列


64

テキストファイルがあります。

deiauk 1611516 afsdf 765
minkra 18415151 asdsf 4152
linkra sfsfdsfs sdfss 4555
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4
deiauk 1611516 afsdf ddfgfgd
luktol1 4545 4 9
luktol 1

そして、私は正確に一致したいdeiauk。私がこれを行うとき:

grep "deiauk" file.txt

私はこの結果を得ます:

deiauk 1611516 afsdf 765
deiauk1 sdfsfdsfs 1561 51
deiauk2 115151 5454 4

しかし、私はこれだけが必要です:

deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

-wオプションがあることは知っていますが、文字列全体を一致させる必要があります。


4
実際に試してみましたgrep -wか?(そのオプションはまさにその目的のためであり、私にとっては有効です。)-注:オプション-xは行全体に一致します。
ジャニス

「正確に一致させたいdeiauk / 「これだけ必要ですdeiauk 1611516 afsdf 765 -どちらが必要ですか?
アレックス

回答:


129

次のいずれかを試してください:

grep -w "deiauk" textfile

grep "\<deiauk\>" textfile

3
文字列の最後にダッシュ(-)がある場合、このスクリプトは結果としてそれをもたらしますが、これは予期されていませんでした。
エヴィス

正しい@Evert:単語にはアルファ文字、数字、アンダースコアのみが含まれているため、略語や他のアイテムがハイフネーションされている場合、これは機能しません。
ingyhere

@Cyrus *単語にvi / vim コマンドを使用して、2番目の方法を学びました。
shuva

それは、たとえばしているすべての特殊文字では動作しませんorg.apache.avro avroとgreped org.apache.avro avro+mapred(*を試してみました)
Vishrant

12

GNU grepでこれを試して、単語の境界をマークしてください\b

grep "\bdeiauk\b" file

出力:

deiauk 1611516 afsdf 765

参照:http : //www.regular-expressions.info/wordboundaries.html


感謝しますが、なぜこれがうまくいかないのですか?echo "Enter login: " $vard grep -E "$\bvard\b" file.txt
user3334375

試してくださいgrep "\b${vard}\b" file.txt
サイラス

1
それでも動作しません:/
user3334375

必要なものreadread -p "Enter login: " vard; grep "\b${vard}\b" file.txt
サイラス

7

あなたの場合はgrepサポート-P(PCRE)、あなたが行うことができます。

$ grep -P '(^|\s)\Kdeiauk(?=\s|$)' file.txt 
deiauk 1611516 afsdf 765
deiauk 1611516 afsdf ddfgfgd

4
これは、ハイフンで区切られた単語で機能する唯一の答えです。
ingyhere

5

実際のデータに応じて、単語に続いてスペースを探すことができます。

grep 'deiauk ' file.txt 

行の先頭になければならないことがわかっている場合は、それを確認します。

grep '^deiauk ' file.txt 

悲しいことに、これ以外の答えはすべて間違っています。
-Shatu

@Shatuありがとう!「トップにバブル」するのにどれくらい時間がかかるか見てみましょう...私は古い質問に答えを追加するのが好きなので興味があります...それはそうであると思われますが、私はそれを疑います。それは私にはちょうどいいでしょうが、実際には読者には便利です。これを良い例とするために、他の答えが欠けているものを要約するコメントを書くようにお願いできますか?
フォルカーシーゲル

(1)10Kの担当者に達しました。これで、この回答が以前に与えられ、削除されたことを確認する特権が与えられました。(2)言われたことに基づいて、できる限り広く質問に答え、サンプルデータだけに有効な答えを出さないことが常に良いです。質問のデータ例から、列はスペースで区切られているように見えますが、指定されていません。他のすべての回答は、タブ区切りの列でも機能します。(3)^—を追加することにより、タコミ(削除済み)の回答の致命的な欠陥を回避しましたが、他のすべての回答は機能します…(続き)
G-Man

(続き)…文字列が最初のフィールド以外のフィールドに表示される場合。(4)また、 '' deiauk ''が最後のフィールドである場合(つまり、その後に何もない場合)、他のすべての回答が機能します。
Gマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.