我正在尝试编写一个 sed 命令,该命令将使用文本文件中的“*”屏蔽所有长度为 3/4 数字的实例。我有这个:
s/[0-9]\{4\}/\*\*\*\*/g
s/[0-9]\{3\}/\*\*\*/g
这将做到这一点,但也掩盖了任何更长的数字字符串的前 3/4 个字符。
有没有办法屏蔽长度为 3 和 4 的字符串。这些数字也可以是文本的一部分。
我是 sed 的新手,并试图阅读文档,但我正在努力删除我需要的文档。
提前致谢!
我正在尝试编写一个 sed 命令,该命令将使用文本文件中的“*”屏蔽所有长度为 3/4 数字的实例。我有这个:
s/[0-9]\{4\}/\*\*\*\*/g
s/[0-9]\{3\}/\*\*\*/g
这将做到这一点,但也掩盖了任何更长的数字字符串的前 3/4 个字符。
有没有办法屏蔽长度为 3 和 4 的字符串。这些数字也可以是文本的一部分。
我是 sed 的新手,并试图阅读文档,但我正在努力删除我需要的文档。
提前致谢!
你没有给出任何输入示例,试试这个,看看它是否有帮助:
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
保持不变。