次の行を含むファイルから:
# lorem ipsum blah variable
#
特定の文字列を含む同じ行から文字を所定の位置から削除(コメント)したいと思います。sed
これにはどんな利点がありますか?
この条件を作動させようとしています。これを行うための「不器用な」方法があります。awk
orを使用して一致する行番号を見つけて、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
。