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_
就足够了
在我的文件中有这两个条目
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_
就足够了