用条件替换目录路径的sed

时间:2015-04-24 07:47:10

标签: bash shell unix sed

在我的文件中,这两个条目是

cat a.txt
/a/d/f
/a/d/f/

我想将这两者都替换为/ a / d / f / g

我尝试了各种各样的sed形成,如下所示

sed -i -e 's|/a/d/f|/a/d/f/g/|g' -e 's|/a/d/f/|/a/d/f/g/|g' a.txt

但这取代了这个

more a.txt
/a/d/f/g/g/
/a/d/f/g/g//

如果我们可以在sed中添加一些其他条件来替换上面的字符串

,请分享您的想法

4 个答案:

答案 0 :(得分:3)

为什么不呢:

sed -i -r 's|/a/d/f/?|/a/d/f/g|' a

示例:

$ cat a.txt
/a/d/f
/a/d/f/
$ sed -i -r 's|/a/d/f/?|/a/d/f/g|' a.txt
$ cat a.txt
/a/d/f/g
/a/d/f/g

答案 1 :(得分:2)

使用awk

awk -F/ -vOFS="/" '$5="g"' file

使用sed

sed -r 's|(/a/d/f)/?|\1/g|' file

输出

/a/d/f/g
/a/d/f/g

答案 2 :(得分:1)

如果您的实际输入符合示例:

,这应该有效
sed 's!f/\?$!f/g!' input_file

给出:

/a/d/f/g
/a/d/f/g

答案 3 :(得分:0)

sed -i -e 's_^/a/d/f/\{0,1\}$_&/g_' a.txt
  • s///操作中使用其他分隔符(此处为_),以允许将/用作普通字符
  • 使用分隔符(^$)来限制您的确切顺序
  • 使用(非强制性)&,因为您只是在替换模式中添加某些东西。

我认为只有那些只有那些2的线。如果不是这种情况,简单的s_$_/g_就足够了