sed +パラメータがタブまたはスペースで始まっても、行の先頭からパラメータをコメントアウトする方法

sed +パラメータがタブまたはスペースで始まっても、行の先頭からパラメータをコメントアウトする方法

次のファイルがあります

more /tmp/file
    number_of_cars_are=$number_of_cars_are
  LOG "number_of_cars_are=$number_of_cars_are"

echo "number_of_cars_are are $number_of_cars_are"

     grep number_of_cars_are /tmp/test 

&で始まる行にのみコメントを付けたいですnumber_of_cars_are=。その行がすでにコメントである場合、sedはそれを無視する必要があります。

だから私たちは次のことをしました。

sed  '/^[^#].*^[[:space:]]*number_of_cars_are=/ s/^/#/' /tmp/file

ただし、number_of_cars_are = $number_of_cars_are行は同じままです。

期待されるパフォーマンス

more /tmp/file
#    number_of_cars_are=$number_of_cars_are
  LOG "number_of_cars_are=$number_of_cars_are"

echo "number_of_cars_are are $number_of_cars_are"

     grep number_of_cars_are /tmp/test 

ベストアンサー1

行を一致させるために使用する正規表現には2つの行開始アンカー(^)があるため、2番目のアンカーは実際の^シンボルにのみ一致します。^before を削除すると、[[:space:]]式は一致しますが、一致が多すぎます。

#    number_of_cars_are=$number_of_cars_are
#  LOG "number_of_cars_are=$number_of_cars_are"

LOG "一致する.*ので許可されます。式の先頭を削除します。

sed  '/^[[:space:]]*number_of_cars_are=/ s/^/#/'

これは空白文字(なしを含む)で始まり、それに続くすべての行と一致しますnumber_of_cars_are=。これにより、コメント行は一致しないため再処理されず、 で直ちに始まる行がnumber一致します。

おすすめ記事