使用 grep -w 的 Bash 腳本

使用 grep -w 的 Bash 腳本

我正在使用以下命令: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-8https://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

這是一個務實的解決方案,但希望它適用於這項任務。

相關內容