1. ホーム
  2. command-line

[解決済み】sedを使って、ファイル内の最初の出現箇所のみを置換する方法は?

2022-04-02 04:17:39

質問

私は、既存の#includesの前に余分なinclude指示で多数のC++ソースファイルを更新したいと思います。この種のタスクのために、私は通常、ファイルを書き直すためにsedと小さなbashスクリプトを使用しています。

どうすれば sed は、ファイル内で文字列が出現するたびに置換するのではなく、最初に出現する文字列だけを置換するのですか?

もし私が

sed s/#include/#include "newfile.h"\n#include/

は、すべての #includes を置き換えます。

同じことを達成するための代替案も歓迎します。

どのように解決するのですか?

 # sed script to change "foo" to "bar" only on the first occurrence
 1{x;s/^/first/;x;}
 1,/foo/{x;/first/s///;x;s/foo/bar/;}
 #---end of script---

または、お好みで 編集者注: GNU sed だけです。

sed '0,/foo/s//bar/' file 

ソース