如何使用sed和regex替换可变数量的一个令牌之间的文本?
输入示例:
/abc/bcd/cde/
预期产出:
/../../../
试过:
命令:echo "/abc/bcd/cde/" | sed 's/\/.*\//\/..\//g'
输出:/../
答案 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'