テキストファイルがあります:
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
とI 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
オプションがあることはわかっていますが、文字列全体をマッハする必要があります行。
コメント
回答
次のいずれかをお試しください:
grep -w "deiauk" textfile grep "\<deiauk\>" textfile
コメント
- お持ちの場合文字列の最後にダッシュ(–)を付けると、このスクリプトによって結果として文字列が表示されますが、これは予期されていませんでした。
- 正しい@Eve rt:単語には英字、数字、アンダースコアのみが含まれるため、略語やその他の項目がハイフンでつながれている場合、これは機能しません。
- @Cyrus vi / vim
*
コマンド。 - たとえば、
org.apache.avro avro
が(*で試してみました) - 正確には
-wE
を使用してください複数の単語の一致(ブールOR)
回答
GNU そして\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
-
grep "\b${vard}\b" file.txt
- それでも'は機能しません:/
- あなたは'必要です
read
:read -p "Enter login: " vard; grep "\b${vard}\b" file.txt
回答
div id = “44d409d21f”>
は-P
(PCRE)をサポートしており、次のことができます。
$ grep -P "(^|\s)\Kdeiauk(?=\s|$)" file.txt deiauk 1611516 afsdf 765 deiauk 1611516 afsdf ddfgfgd
コメント
- これはハイフンでつながれた単語で機能する唯一の回答です。
-
\K
( PCREリセット試合開始)が必要ですか?この提案されたソリューションは、それがなくても問題なく機能するようです。
回答
実際のデータによっては、次のことができます。単語の後にスペースが続くものを探します:
grep "deiauk " file.txt
行の先頭にある必要があることがわかっている場合は、それを確認します:
grep "^deiauk " file.txt
コメント
- 残念ながら、これ以外のすべての回答は正しくありません。
- @Shatuありがとう!それでは、'が"が一番上まで泡立つまでにかかる時間を見てみましょう" … '古い質問への回答を追加したいので興味があります…そうなると思われますが、疑わしいです。それは私にとっては素晴らしいことですが、実際には読者にとっては役に立ちます。これを良い例にするために、他の回答に欠けているものを要約したコメントを書いていただけますか?
- (1)10Kの担当者に到達しておめでとうございます。これで、この回答が以前に与えられ、削除されたことを確認する権限があります。 (2)発言内容に基づいて、質問にできるだけ幅広く回答し、サンプルデータだけに有効な回答を提供しないことをお勧めします。質問のサンプルデータから、列はスペースで区切られているように見えますが、それは指定されていません。他のすべての回答は、タブ区切りの列でも機能します。 (3)
^
を追加することで、tachomiの(削除された)回答の致命的な欠陥を回避しましたが、他のすべての回答は機能します…(続き) - (続き)…文字列が最初のフィールド以外のフィールドに表示される場合。 (4)また、「deiauk」が最後のフィールドである場合(つまり、その後に何もない場合)、他のすべての回答が機能します。
回答
-x
が機能していることがわかりました。
例
$ grep -inx -d skip "favicon.ico" * test.txt:1:favicon.ico
Grepマニュアル
-x, --line-regexp Select only those matches that exactly match the whole line. For a regular expression pattern, this is like parenthesizing the pattern and then surrounding it with ^ and $.
コメント
- ハイフンを含む行全体を1:1で照合するには、
-x
唯一のオプション。たとえば、grep -w "abc" <<<"abc-hac101-bb0"
は一致しますが、grep -x "abc" <<<"abc-hac101-bb0"
は一致しません
grep -w
を試しましたか?(このオプションはまさにその目的のためです、そしてそれは私のために働きます。)-注:オプション-x
は行全体に一致します。deiauk
/ "これだけが必要です:deiauk 1611516 afsdf 765
" -どちらが必要ですか?