1

我想知道如何 grep 所有不适合你想要给它的字符集的字符。

例如,假设我有一个包含以下文本的文件

XXXXX0000000HelloXXXXXX
MyXXXName0000Is00000000
XXXXXJamesXXX0X0X0X0XXX

我希望它以其他方式打印出“HelloMyNameIsJames”或那些字符(如果它以每行一个字符的形式出现,我会很好)。

任何帮助将不胜感激!Raymosrunerx

4

5 回答 5

1
tr -d X0 < input 

输出:

Hello
MyNameIs
James

要删除行尾:

tr -d 'X0\n' < input 

输出

HelloMyNameIsJames

(没有尾随行结束)

于 2012-10-04T22:08:43.460 回答
1

另一种解决方案,每行一个字符,使用grep(如果您grep支持-o):

grep -o '[^X0]'
于 2012-10-04T22:10:28.467 回答
1

如果这些行包含在文件 testdata 中,则以下命令将分别打印一行,如下所示:

sed -e 's/[0X]//g' testdata | xargs
Hello MyNameIs James

希望这能满足您的需求!

于 2012-10-04T22:17:27.423 回答
1

如果您希望每行一个单词,这是一种使用方法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
于 2012-10-04T22:53:01.047 回答
0

尝试:

sed -e 's/[X0]//g' input

grep不会为你删除东西。

于 2012-10-04T22:09:26.207 回答