ファイル内の文字列を置き換える方法(#で始まる行を除く)

ファイル内の文字列を置き換える方法(#で始まる行を除く)

代替文字列の使用に関する他のいくつかの質問を調べましたが、sed特定の要件にそれを適用する方法はわかりません。

以下のコードスニペットのような場合は、「#」で始まらない行の文字列のみを変更したいと思います。

    #####################################
    # Blah blah blah string blah blah
    #####################################

    PKG_NAME="string"
    PKG_DESC="string-foo"

出力が次のようになります。

    #####################################
    # Blah blah blah string blah blah
    #####################################

    PKG_NAME="newString"
    PKG_DESC="newString-foo"

私が収集した情報によると、findとsedを使用してすべてのファイルのすべての文字列を変更できると思います。

find . -type f -exec sed -i 's/string/newString/g' {} +

しかし、「#」で始まる行に例外を追加する方法はわかりません。私はsedの他に他の方法も開いているので、もっと簡単な方法があれば自由に共有してください。

読んだ後複数のパターンに一致するsedの行だけを変更する方法は?、行が特定のパターンで始まると文字列を変更する方法を学びましたが、必要なのはパターンのある行を変更することです。いいえ確立された。

ベストアンサー1

sed感嘆符付きのパターンを見つけたら、実行を停止できます。

sed '/#/!s/string/replacement/' file

つまり、「#」(どこでも)と一致する行では置換は行われません。それ以外の場合は交換が行われます。あなたの場合、結果は次のとおりです。

#####################################
# Blah blah blah string blah blah
#####################################

PKG_NAME="replacement"
PKG_DESC="replacement-foo"

ハッシュで始まる行だけをスキップするには、正規表現を次のように変更します。

sed '/^#/!s/string/replacement/' file

最後にコメントがある行にはコメントセクションにも変更が適用されますが、上記の例ではこれらの行はまったく変更されません(コードセクションを含む)。

おすすめ記事