0

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

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

这将做到这一点,但也掩盖了任何更长的数字字符串的前 3/4 个字符。

有没有办法屏蔽长度为 3 和 4 的字符串。这些数字也可以是文本的一部分。

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

提前致谢!

4

1 回答 1

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

请注意,此行将替换foo123barfoo***bar,但将foo123456bar保持不变。

于 2013-03-28T11:23:41.770 回答