我是sed的新手所以请耐心等待...我有一个内容如
的文件a=1
b=2,3,4
c=3
d=8
.
.
我想将'x'追加到以'c ='开头并且不包含'x'的行。我现在使用的是
sed -i '/^c=/ s/$/x/'
但是这并没有涵盖我的解释的第二部分,只有当行没有它时才应附加'x',因此如果我运行命令两次它会使行“c = 3xx”,我不想要。
这里的任何帮助都会受到高度赞赏,我知道这里有很多尖锐的脑袋:)我知道这可以通过bash轻松处理,但是在这里使用sed是一个很难的要求。
答案 0 :(得分:4)
您可以这样做:
sed -i '/^c=/ {/x/b; s/$/x/}'
使用圆括号进行分组。 b
命令分支到脚本的末尾(停止处理当前行)。
b label
Branch to label; if label is omitted, branch to end of script.
编辑:正如William Pursell在评论中所建议的那样,更短的版本将是
sed -i '/^c=/ { /x/ !s/$/x/ }'
答案 1 :(得分:2)
awk
可能是更好的选择,因为您可以轻松地将正则表达式匹配与逻辑运算符组合在一起。鉴于输入:
$ cat file
a=1
b=2,3,4
c=3
c=x
c=3
d=8
命令是:
$ awk '/^c=/ && !/x/ {$0=$0"x"; print $0}' file
a=1
b=2,3,4
c=3x
c=x
c=3x
d=8
其中$0
是包含正在读取的当前行的awk
变量。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -i '/^c=[^x]*$/s/$/x/' file
或:
sed -i 's/^c=[^x]*$/&x/' file