2012-01-11 11 views
61

は、私は今、私はそれらを交換したいライン行全体をsedに置き換えるには?</p> <pre>sed "s/aaa=bbb/aaa=xxx/g"</pre> <p>を今私が持っている:私は次のようにそれを行うことができます</p> <pre>aaa=xxx</pre> <p>:

aaa=bbb

を持つファイルがあるとし以下のようにいくつかの行のファイル:

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

にはどうすればSEDを使用して、すべてのこのラインaaa=xxxaaa=[something]を置き換えることができますか?

+1

'[something else]'はリテラルテキストですか、それとも単なるプレースホルダですか?等号の後に可能な形式は何ですか? – ean5533

答えて

111

これを試してみてください:

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

あなたはaaa=は、行の先頭にあることを保証したい場合は、それを作る:

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

「g」は何ですか? –

+2

習慣の力は、この場合無視することができます。これは、最初の行ではなく、各行を置換する行のグローバルな置換えとして使用されます。この場合、 '。*'のため最初のものだけがマッチします。 –

+0

Michael J. Barber、 'g' regexpのすべてのインスタンスをreplacement –

33

このようにawkを使用したい場合は、これもうまくいくでしょう

これはあなたのために働くかもしれない
awk -F= '{$2="xxx";print}' OFS="\=" filename 
2

sed "s/aaa=.*/aaa=xxx/g" 
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

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

+1

OSXのバグのような音が私にSED ... –

+2

OSXはBSD sedを使用しています –