我想知道如何 grep 所有不适合你想要给它的字符集的字符。
例如,假设我有一个包含以下文本的文件
XXXXX0000000HelloXXXXXX
MyXXXName0000Is00000000
XXXXXJamesXXX0X0X0X0XXX
我希望它以其他方式打印出“HelloMyNameIsJames”或那些字符(如果它以每行一个字符的形式出现,我会很好)。
任何帮助将不胜感激!Raymosrunerx
tr -d X0 < input
输出:
Hello
MyNameIs
James
要删除行尾:
tr -d 'X0\n' < input
输出
HelloMyNameIsJames
(没有尾随行结束)
另一种解决方案,每行一个字符,使用grep
(如果您grep
支持-o
):
grep -o '[^X0]'
如果这些行包含在文件 testdata 中,则以下命令将分别打印一行,如下所示:
sed -e 's/[0X]//g' testdata | xargs
Hello MyNameIs James
希望这能满足您的需求!
如果您希望每行一个单词,这是一种使用方法GNU grep
:
grep -oP '(?<=[0X]|\b)[^0X]+(?=[0X]|\b)' file.txt
结果:
Hello
My
Name
Is
James
你可以sed
用来整理你的输出:
< file.txt grep -oP '(?<=[0X]|\b)[^0X]+(?=[0X]|\b)' | sed ':loop; N; $!b loop; s/\n/ /g'
结果:
Hello My Name Is James
尝试:
sed -e 's/[X0]//g' input
grep
不会为你删除东西。