使用 sed 将给定字符串的所有字符替换为给定模式

问题描述 投票:0回答:1

我有很多文件,其中包含以下行:

[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 不可行,则可能是可接受的回退)

string sed replace
1个回答
0
投票

为此我会使用

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]
© www.soinside.com 2019 - 2024. All rights reserved.