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