Sed --- 一致する行の文字を変更しますか?

Sed --- 一致する行の文字を変更しますか?

次の行を含むファイルから:

# lorem ipsum blah variable

#特定の文字列を含む同じ行から文字を所定の位置から削除(コメント)したいと思います。sedこれにはどんな利点がありますか?

この条件を作動させようとしています。これを行うための「不器用な」方法があります。awkorを使用して一致する行番号を見つけて、sedその番号を別のsedコマンドに使用できますが、これを行うより良い方法があると確信しています。

答え1

作業したい行のセレクタとして探している文字列を使用します。

sed '/ipsum/s/#//g'

/ipsum/「ipsum」を含む行を選択し、この行でのみ次のコマンドを実行します。中かっこを使用してより多くのコマンドを実行できます

/ipsum/{s/#//g;s/@/-at-/g;}

答え2

$ 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最初のグループ化括弧の内容の逆参照です。

答え3

POSIXツールを使用できますex

ex a.txt <<eof
/Sunday/ sub/Sun//
xit
eof

https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ex.html

答え4

次のようにこれを行うことができます。

sed '/ipsum/s/^# //g'

コメントを含むすべての行を一致させ、行の先頭からipsumコメントを削除します。^行の先頭と一致し、$行の終わりと一致します。コマンドの残りの部分は、sed 's/find/replace/g'ファイルを編集するために呼び出すことができる構文を使用しますsed -i '/ipsum/s/^# //g' file

次のようにこのプロセスを元に戻すことができます。

sed '/ipsum/s/^/# /g'

含まれる各行の先頭に説明が追加されますipsum

関連情報