使用 grep -w 的 Bash 脚本

使用 grep -w 的 Bash 脚本

我正在使用以下命令:x.txt | grep -w 'in' 并且我得到的答案如下:in into ... 等等。

我只想要答案:

我应该如何修改命令?

答案1

首先,命令应该是

grep -w in x.txt

你当前的管道不起作用,而且没有必要cat只通过管道将文件传输到文件。grep可以直接读取文件。

其次,它-w确实做了你想要的事情。从手册页中:

-w,——单词-正则表达式

仅选择包含组成整个单词的匹配项的行。测试是匹配的子字符串必须位于行首,或者前面有一个非单词组成字符。同样,它必须位于行尾,或者后面跟着一个非单词组成字符。单词组成字符包括字母、数字和下划线。

grep将返回完整线路但是单词出现的位置;这就是 的功能grep;我提到它是为了确保您不会因此而感到困惑。

如果你只是想要回报这个词,正如你所说,你可以这样做

grep -ow in x.txt

因为-o只返回匹配的部分,但这似乎没有什么效果。你究竟想做什么?


编辑:一个明确的例子:

$ cat test
word in word
within word
word word
$ grep -w in test
word in word

“within” 不匹配。

编辑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

这是一个务实的解决方案,但希望它能适用于这项任务。

相关内容