在我的文件中,这两个条目是
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中添加一些其他条件来替换上面的字符串
,请分享您的想法答案 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_
就足够了