删除所有长度为3或4的数字串 - SED

时间:2013-03-28 11:16:00

标签: sed

我正在尝试编写一个sed命令,该命令将使用文本文件中的“*”屏蔽所有长度为3/4的数字实例。我有这个:

s/[0-9]\{4\}/\*\*\*\*/g
s/[0-9]\{3\}/\*\*\*/g

将执行此操作,但也会屏蔽任何较长数字字符串中的前3/4个字符。

是否可以屏蔽长度为3和4的字符串。数字也可以是文本的一部分。

我是sed的新手并试图阅读文档,但我正在努力删除我需要的文档。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您没有提供任何输入示例,请尝试此操作,看看是否有帮助:

sed -r 's/\b[0-9]{3}\b/***/g;s/\b[0-9]{4}\b/****/g' file

示例:

kent$  echo "111
1234567
111 1111 12ab 1111a                                        
11 1111 1"|sed -r 's/\b[0-9]{3}\b/***/g;s/\b[0-9]{4}\b/****/g'
***
1234567
*** **** 12ab 1111a
11 **** 1
顺便说一句,你真的想用 3 星代替3个数字,用 4 星代替4个数字吗?

修改

sed -r 's/([^0-9]|\b)[0-9]{3}([^0-9]|\b)/\1***\2/g;s/(\b|[^0-9])[0-9]{4}(\b|[^0-9])/\1****\2/g' file

测试(使用OP的例子)

kent$  echo "111
1234567
111 1111 12ab 1111a
11 1111 1
 fhdjs777ssaa"|sed -r 's/([^0-9]|\b)[0-9]{3}([^0-9]|\b)/\1***\2/g;s/(\b|[^0-9])[0-9]{4}(\b|[^0-9])/\1****\2/g'    
***
1234567
*** **** 12ab ****a
11 **** 1
 fhdjs***ssaa

请注意,此行会将foo123bar替换为foo***bar,但会foo123456bar保持不变。