限制不适合某组给定字符的字符

时间:2012-10-04 22:07:14

标签: linux ubuntu grep

我想知道如何将所有不符合你想要的字符的字符格式化。

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

XXXXX0000000HelloXXXXXX
MyXXXName0000Is00000000
XXXXXJamesXXX0X0X0X0XXX

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

任何帮助将不胜感激! Raymosrunerx

5 个答案:

答案 0 :(得分:1)

tr -d X0 < input 

输出:

Hello
MyNameIs
James

也要删除行尾:

tr -d 'X0\n' < input 

输出

HelloMyNameIsJames

(没有尾随行结束)

答案 1 :(得分:1)

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

grep -o '[^X0]'

答案 2 :(得分:1)

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

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

希望这能满足您的需求!

答案 3 :(得分: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

答案 4 :(得分:0)

尝试:

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

grep不会为您删除内容。