sed +替换目录PATH上的单词

时间:2010-07-04 08:10:01

标签: regex sed

如何更换

<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>

1 个答案:

答案 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。