2012-01-11 52 views
61

假设我有一个线如何用sed替换整个行?

aaa=bbb

现在一个文件,我想,以取代他们:

aaa=xxx

我能做到这一点,如下所示:

sed "s/aaa=bbb/aaa=xxx/g"

现在我有一个文件中有几行如下:

aaa=bbb 
aaa=ccc 
aaa=ddd 
aaa=[something else]

如何更换全部此行aaa=[something]使用aaa=xxx使用sed

+1

[[别的]]是文本文本,还是只是一个占位符?等号后面的东西的可能格式是什么? – ean5533 2012-01-11 15:46:59

回答

111

试试这个:

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

g是什么? – 2012-01-11 15:48:33

+2

习惯的力量,在这种情况下它可以被忽略 - 它被用作替代每场比赛的全局替代品,而不是仅替代第一场比赛。在这种情况下,尽管只有第一个匹配,因为'。*'。 – 2012-01-11 15:58:36

+0

Michael J. Barber,'g'将替换的所有regexp实例替换为 – 2017-03-28 19:06:13

33

像这样:

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

如果你想保证aaa=是在该行的开始,使之:

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

如果你想使用awk那么这也可以工作

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

这可能会为你工作:

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 
+0

我不认为明确检查bbb,ccc和ddd是OP所想的。 – spinup 2016-05-12 15:22:08

2
sed -i.bak 's/\(aaa=\).*/\1"xxx"/g' your_file 
57

您还可以使用sed中的变线来实现:

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

这将经历和发现,通过任何行aaa=测试,这意味着该行包含字母aaa=。然后它用aaa = xxx替换整个行。您可以在测试开始时添加一个^,以确保您只能得到以aaa=开头的行,但这取决于您。

+2

OS X的'sed'需要'c'后跟一个反斜杠和一个换行符,并且它不会在插入的文本中追加换行符,但可以使用例如'$'/ aaa =/c \\\ NAAA = XXX \ n''。 – user495470 2013-09-29 13:52:32

+1

听起来像是OSX sed中的一个bug ... – 2016-03-28 23:55:55

+2

OSX使用BSD sed – 2016-05-26 17:25:24