Bash替换令牌之间的字符串

时间:2018-03-27 13:24:22

标签: regex linux sed

如何使用sed和regex替换可变数量的一个令牌之间的文本?

输入示例:

/abc/bcd/cde/

预期产出:

/../../../

试过

命令:echo "/abc/bcd/cde/" | sed 's/\/.*\//\/..\//g'输出:/../

3 个答案:

答案 0 :(得分:2)

使用perl和look around assertions

$ perl -pe 's|(?<=/)\w{3}(?=/)|..|g' file
/../../../

使用sed:

$ echo "/abc/bcd/cde/" | sed -E 's|[a-z]{3}|..|g'
/../../../

答案 1 :(得分:1)

用两个点替换非斜杠([^/]\+)的每个子串:

$> echo "/abc/bcd/cde/" | sed 's$[^/]\+$..$g'
# => /../../../

答案 2 :(得分:1)

基于@Gilles Quenot实现,但在//

之间捕获任何字母数字字符
$ echo "/abddc/bcqsdd/cdde/" | sed -E 's|(/)?[^/]+/|\1../|g'