我正在使用以下命令: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-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
这是一个务实的解决方案,但希望它能适用于这项任务。