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 中放置一些其他条件来替换上面的字符串,请分享您的想法

为什么不只是:

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

with 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

如果您的实际输入与示例匹配,这应该有效:

sed 's!f/?$!f/g!' input_file

给:

/a/d/f/g
/a/d/f/g
sed -i -e 's_^/a/d/f/{0,1}$_&/g_' a.txt
  • s///操作中使用另一个分隔符(此处_ )以允许将/用作普通字符
  • 使用分隔符(^$ )将限定为确切的序列
  • 使用(不是强制性的)&,因为您只是在替换模式中向现有内容添加一些内容。

我假设只有那 2 条线更多。如果不是这种情况,一个简单的s_$_/g_就足够

相关内容

  • 没有找到相关文章

最新更新