sedを使用して特定の単語の後のテキストを置き換えるにはどうすればよいですか?


12

という名前のファイルがあります.ignore。を交換する必要がありprojdirます。例えば:

ignore \..*
ignore README
projdir Snake

Snakeを「PacMan」などに置き換える必要があります。manページを読みましたが、どうすればよいかわかりません。

回答:


18

で始まる行を検索し、行projdir全体を新しい行で置き換えます。

sed -i 's/^projdir .*$/projdir PacMan/' .ignore

^および$行の始まり/終わりのマーカーなので、パターンは行全体に一致します。.*何にでもマッチします。-i伝えsedに直接変更を書き込むために.ignoreちょうどそれらを出力するのではなく、


5

1つのアプローチは、保持したい部分の後方参照を使用して、行全体を書き直すことです。

sed -e 's/^\( *projdir  *\)[^ ]*\(.*\)*$/\1PacMan\2/'

別のアプローチは、行のその部分を書き換えることですが、他の部分が一致する場合のみです。

sed -e '/^ *projdir / s/ [^# ]/ PacMan/'

どちらの例も、最初の単語がである行の空白で区切られた2番目の単語を書き換えprojdirます。


3

これは古い投稿であり、承認された回答で解決されたようですが、実際の質問には回答されていません。完全性のために、そして他の人を助けるために:

ここでは、実際には「Snake」に一致し、「projdir」で始まる行には一致しない回答...

sed -r 's/(^.*)Snake/\1PacMan' .ignore

これにより、「Snake」を含む行の最初からすべてが「Snake」+「PacMan」の前のすべてに置き換えられます。\ 1は()内で一致するものを表します。「Snake」以降はすべてそのままです。


1
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore

^ projdirは、文字列projdirで始まる行を検索します。。* $は、同じ行のprojdirの後の文字列を表します。文字列projdir PacManは、置き換える文字列です。gはグローバルです。projdirで始まるすべての行を置き換えます。.ignoreはファイルの名前です


1
あなたの答えを拡張して、何が何であるかを明確にしていただけませんか?
Romeo Ninov 2017年

回答は、コマンドまたはコードの一部が機能する方法と理由の説明が含まれている場合、はるかに役立ちます。
Anthony Geoghegan 2017年

これが編集後にもっと役立つことを願っています
Tinu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.