
我正在使用以下命令:x.txt | grep -w 'in' 我得到的答案如下: in into ... 等等。
我只想要答案:在
我應該如何修改命令?
答案1
首先,命令應該是
grep -w in x.txt
您目前的管道不起作用,且cat
文件沒有必要僅對其進行管道傳輸。grep
可以直接讀取文件。
其次,它-w
完全符合您的要求。從手冊頁:
-w, --word-正規表示式
僅選擇包含構成整個單字的匹配項的行。測試是匹配的子字串必須位於行的開頭,或者前面有一個非單字組成字元。同樣,它必須位於行尾或後跟非單字組成字元。單字組成字元是字母、數字和底線。
grep
將返回完整的線路不過這個字出現的地方;這就是 的函數grep
;我提到它是為了確保你不會因此而感到困惑。
如果你只是想要回去的話,正如你所說,你可以做到
grep -ow in x.txt
因為-o
只回傳匹配的部分,但這似乎沒有什麼成果。你到底想做什麼?
編輯:一個明確的例子:
$ cat test
word in word
within word
word word
$ grep -w in test
word in word
“內”不符。
編輯2:另一個例子:
$ grep '\<in\>' test
word in word
編輯3:據信問題出在瑞典字。即使環境變數LANG
設定為,我也可以重現這一點sv_SE.UTF-8
。https://stackoverflow.com/questions/9260293/egrep-accented-characters-not-recognised-as-part-of-a-word建議使用 Perl 執行 UTF-8 特定任務作為最簡單的解決方案。
編輯4:看來我可以用sed
瑞典字來實現這一點:
$ cat test
word den word
avträden word
word word
$ sed -n '/\bden\b/p' test
word den word
$ sed -n '/\<den\>/p' test
word den word
這是一個務實的解決方案,但希望它適用於這項任務。