【发布时间】:2018-11-15 03:38:30
【问题描述】:
我需要在 Sed 编辑器中使用正则表达式屏蔽 4 个字符后的字符串。
示例:1234567890
结果:1234XXXXXX
你能帮帮我吗?
【问题讨论】:
-
字符串的长度是否总是相同(在这种情况下为 10 个字符)?
-
你的文字可以包含空格吗?
我需要在 Sed 编辑器中使用正则表达式屏蔽 4 个字符后的字符串。
示例:1234567890
结果:1234XXXXXX
你能帮帮我吗?
【问题讨论】:
关注awk 可能会对您有所帮助。
echo "1234567890" | awk '{for(i=5;i<=length($0);i++){val=val?val "X":"X"};print substr($0,1,4) val;val=""}'
输出如下。
1234XXXXXX
【讨论】:
在 GNU sed 中:
echo "1234567890" | sed "s/./X/5g"
【讨论】:
/5g 的行为是特定于 GNU sed 的。
$echo "1234567890"|awk '{for(i=5;i<=NF;i++)$i="X"}7' FS="" OFS=""
1234XXXXXX
【讨论】:
使用 perl,您可以在替换文本中放入任意 perl 代码:
perl -pe 's/^(....)(.*)/$1 . "X" x length($2)/e' <<END
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
END
1
12
123
1234
1234X
1234XX
1234XXX
1234XXXX
1234XXXXX
1234XXXXXX
【讨论】:
使用 sed
count=4
echo "1234567890" | \
sed ':A;s/\(\(.\)\{'"$count"'\}\)\(X*\)[^X]/\1\3X/;tA'
或
sed -E ':A;s/((.){'"$count"'})(X*)[^X]/\1\3X/;tA'
【讨论】: