Sed 用条件替换目录路径

Sed to replace directory path with condition

在我的文件中有这两个条目

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

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

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

给出:

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

使用 awk

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

使用 sed

sed -r 's|(/a/d/f)/?|/g|' 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_ 就足够了