我正在尝试编写一个sed命令,该命令将使用文本文件中的“*”屏蔽所有长度为3/4的数字实例。我有这个:
s/[0-9]\{4\}/\*\*\*\*/g
s/[0-9]\{3\}/\*\*\*/g
将执行此操作,但也会屏蔽任何较长数字字符串中的前3/4个字符。
是否可以屏蔽长度为3和4的字符串。数字也可以是文本的一部分。
我是sed的新手并试图阅读文档,但我正在努力删除我需要的文档。
提前致谢!
答案 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
保持不变。