我有像
这样的行1|Harry|says|hi
2|Ron|says|bye
3|Her mi oh ne|is|silent
4|The|above|sentence|is|weird
我需要一个grep命令来检测第三行。
这就是我在做的事。
grep -E '" "" "+' $dname".txt" >> $dname"_error.txt"
我所依据的逻辑是,第一个空格必须后面跟一个或多个空格才能被检测为错误。
$ dname是一个保存文件名路径的变量。
如何获得所需的输出?
(
3|Her mi oh ne|is|silent
)
答案 0 :(得分:7)
grep '[[:space:]]\{2,\}' ${dname}.txt >> ${dname}_error.txt
如果你想捕获2个或更多的空格。
答案 1 :(得分:4)
就是这样:
grep " " ${dname}.txt >> ${dname}_error.txt
引用字符串中的两个空格可以正常工作。 -E
将模式转换为扩展的正则表达式,这使得这里不必要地复杂化。
答案 2 :(得分:1)
以下是四种方式。
pearl.268> sed -n 's/ /&/p' ${dname}.txt >> ${dname}_error.txt
pearl.269> awk '$0~/ /{print $0}' ${dname}.txt >> ${dname}_error.txt
pearl.270> grep ' ' ${dname}.txt >> ${dname}_error.txt
pearl.271> perl -ne '/ / && print' ${dname}.txt >> ${dname}_error.txt
答案 3 :(得分:0)
如果您想要 2个或更多个空格,那么:
grep -E "\s{2,}" ${dname}.txt >> ${dname}_error.txt
你的模式不起作用的原因是因为里面的引号。 \s
用于[空格]。你实际上可以做同样的事情:
grep -E ' +' ${dname}.txt >> ${dname}_error.txt
但很难确切地说出你正在寻找的那个版本。 \s\s+
也可以,但\s{2,}
最简洁,也可以选择设置上限。如果要连续找到2个,3个或4个空格,可以使用\s{2,4}