回答:
操作対象の行のセレクターとして、探している文字列を使用します。
sed '/ipsum/s/#//g'
/ipsum/「ipsum」を含む行を選択し、これらの行でのみ後続のコマンドが実行されます。中括弧を使用して、より多くのコマンドを実行できます
/ipsum/{s/#//g;s/@/-at-/g;}
sed -i '/ipsum/s/#[[:space:]]*//'、を使用して、の直後のスペースとタブを削除することをお勧めします#。(4)#が行の最初の非空白文字であることを確認することも検討できます。現在のコマンドは#、行から削除しますprompt "Enter # of ipsums:"ます。
sed -i '/ipsum/s/^#[[:space:]]*//'ですか??!(^が意味は、行の先頭$行の終わりのために) -少なくともGNUでのsed ...
^、それは間違っています。コードの#直前にインデントされたコードをコメントアウトすることが多いので、#インデントされます。それをするのは私だけだとは思わない。
^&の間の空白もチェックする必要があるため#、次のようにします/ipsum/{/^[[:space:]]*#/s/#[[:space:]]*//}。#それでも、場所によっては問題が発生する場合があります(たとえば、空白のインデント/分離を使用する言語)。
$ cat input.txt
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
# lorem ipsum blue variable
その後:
$ sed 's|# \(.*blue.*\)|\1|' input.txt
与える:
# lorem ipsum blah variable
# lorem ipsum blat variable
# lorem ipsum blow variable
# lorem ipsum blip variable
lorem ipsum blue variable
次のように機能します。
s伝えsed、それは正規表現が見つかったものを代用する必要があること。
パターンは # \(.*blue.*\)に分類されます:ハッシュの後にスペースが続きます。括弧(\()はグループ化を開始します。前後に何でも.*blue.*ある単語blueです。次の括弧(\))はグループ化を閉じます。
置換は\1、最初のグループ化ブラケットのコンテンツへの後方参照です。
's/#//g'を削除します#。それが望んでいない場合は、削除しますg(「グローバル」の略)。(2)所定の場所でファイルを編集するには(質問で求められたとおり)、を使用しますsed -i。