如何用sed替换整行?


132

假设我有一个带有行的文件

aaa = bbb

现在,我想用:

aaa = xxx

我可以这样做,如下所示:

sed“ s / aaa = bbb / aaa = xxx / g”

现在,我有一个带有几行的文件,如下所示:

aaa = bbb
aaa = ccc
aaa = ddd
aaa = [其他]

我怎么能代替所有该行aaa=[something]aaa=xxx使用sed的


2
[something else]文字文字,还是只是占位符?等号后事物的可能格式是什么?
ean5533 2012年

那更多是一个正则表达式问题而不是一个sed问题。
saferJo

Answers:


217

试试这个:

sed "s/aaa=.*/aaa=xxx/g"

4
习惯的力量,在这种情况下可以忽略不计-它被用作行的全局替换以替换每个匹配而不是仅替换第一个。在这种情况下,由于,只有第一个会被匹配.*
约翰·道伊尔

1
Michael J. Barber,g用正则表达式替换所有正则表达式实例
A-IV'3

115

您还可以使用sed的更改行来完成此操作:

sed -i "/aaa=/c\aaa=xxx" your_file_here

这将遍历并找到通过aaa=测试的所有行,这意味着该行包含字母aaa=。然后,它将整个行替换为aaa = xxx。您可以^在测试开始时添加a ,以确保仅获得以该行开头aaa=但取决于您的行。


12
OS X sed要求c后面紧跟一个反斜杠和一个换行符,并且它不会在插入的文本后附加换行符,但是您可以使用例如$'/aaa=/c\\\naaa=xxx\n'
Lri 2013年

这是sed文档中@Mr 的更改/替换功能的示例。T在说。
gene_wood '18

这是实际执行要求的最接近的步骤...(但为便携起见,需要Lri的版本)
Gert van den Berg

42

像这样:

sed 's/aaa=.*/aaa=xxx/'

如果您想保证将aaa=放在行的开头,请执行以下操作:

sed 's/^aaa=.*/aaa=xxx/'

1
如果要替换为aaa ='xxxx'怎么办。我尝试像这样转义,sed 's/aaa=.*/aaa=\'xxx\'/'>在新行中打开了提示...
Nagev

2

如果您想使用,awk那也可以

awk -F= '{$2="xxx";print}' OFS="\=" filename


0

这可能对您有用:

cat <<! | sed '/aaa=\(bbb\|ccc\|ddd\)/!s/\(aaa=\).*/\1xxx/'
> aaa=bbb
> aaa=ccc
> aaa=ddd
> aaa=[something else]
!
aaa=bbb
aaa=ccc
aaa=ddd
aaa=xxx

我不认为要对bbb,进行显式检查ccc,而ddd这正是OP所考虑的。
旋转
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.