我有很多文件,其中包含以下行:
[random strings] /a/given/path [random strings]
我想用
/a/given/path
这样的图案替换XXXXXXXXXXXXX
,X
的数量就是/a/given/path
的大小。
我知道如何使用
X
将其替换为单个 sed 's|/a/given/path|X|g'
,但我不知道如何根据输入路径长度获得正确的 X 数量。
理想情况下,我会依赖单个 sed 命令,无需编写脚本,(但如果单个 sed 不可行,则可能是可接受的回退)
为此我会使用
awk
。
给定文件:
[random strings] /tmp/dir/foo [random strings]
[random strings] /tmp/dir/foobar [random strings]
[random strings] /tmp/dir/foobarbaz [random strings]
awk '
{
match($0,/\/.+\/.+\/[^ ]+/);
s=sprintf("%*s",RLENGTH,"");
gsub(".","X",s);
gsub(/\/.+\/.+\/[^ ]+/,s,$0);
print $0
}' file
输出:
[random strings] XXXXXXXXXXXX [random strings]
[random strings] XXXXXXXXXXXXXXX [random strings]
[random strings] XXXXXXXXXXXXXXXXXX [random strings]