行全体をsedで置き換える方法は?


132

行を含むファイルがあるとします

aaa = bbb

今、私はそれらを次のものに置き換えたいと思います:

aaa = xxx

私はそれを次のように行うことができます:

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

これで、次のような数行のファイルができました。

aaa = bbb
aaa = ccc
aaa = ddd
aaa = [何か他のもの]

このすべての行をsedaaa=[something]aaa=xxx使用して置き換えるにはどうすればよいですか?


2
ある[something else]リテラルテキスト、または単にプレースホルダということでしょうか?等号の後の可能な形式は何ですか?
ean5533

これは、sedの質問ではなく、正規表現の質問です。
saferJo 2018

回答:


217

これを試して:

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

4
習慣の力、この場合は無視できます。これは、最初の一致だけでなく、各一致を置き換える行のグローバル置換として使用されます。この場合、しかし唯一の最初の理由で照合されます.*
ジョンドイル

1
マイケルJ.バーバー、g正規表現のすべてのインスタンスを置換で置き換える
A-IV

116

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

これは、@ Mrの変更/置換機能の sedドキュメントの例です。Tが話している。
gene_wood 2018

これは、実際に尋ねられたことを実行するのに最も近いものです(ただし、移植性のためには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



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

私はのための明示的なチェックを考えていないbbbcccと、dddOPは念頭に置いていたかなりものです。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.