如何更换
<x>
仅在位于最后一个目录之前的目录上使用单词Before_last_dir(根据此示例 - dir4)
echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" |sed s"/<x>/Before_last_dir/g"
另一个例子
echo "/dirA<x>/dirB<x>/dirC<x> >" |sed s"/<x>/Before_last_dir/g"
应该是
/dirA<x>/dirBBefore_last_dir/dirC<x>
答案 0 :(得分:1)
$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed -E "s/<x>(\/[^\/]+)$/Before_last_dir\1/g"
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x>
( - E表示sed正在使用POSIX扩展正则表达式)
或者,如果没有-E(在某些系统上可能无法使用-E):
$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed "s/<x>\(\/[^\/]\{1,\}\)$/Before_last_dir\1/"
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x>
这应该适用于所有地方。 (编辑:将“+”运算符更改为POSIX“{1,}”,因为“+”是GNU扩展名,而不是POSIX。