sed の置換コマンドの前のパターンの使用方法は何ですか

sed の置換コマンドの前のパターンの使用方法は何ですか

これに例があるリンクについてsed

「#」で始まるすべての行の最初の数字を削除するには、次を使用します。

sed '/^#/ s/[0-9][0-9]*//'

最初のパターン( )の利点は何でしょうか/^#/?それは単純に次のようになります。

sed 's/^#[0-9][0-9]*//'

答え1

sedコマンドの一般的な形式は

[address[,address]] function

コマンドに単一のアドレスがある場合、そのアドレスに一致するすべての行が処理されます。コマンドにアドレスがない場合、すべての行が処理されます。

参照:POSIXsed


具体的な例に関して:

  • /^#/ s/[0-9][0-9]*//

    • このコマンドにはアドレス があり、/^#/これは で始まるすべての行に一致します#

    • 置換パターンは です/[0-9][0-9]*/。これは、行内のどこに出現しても最初の数字シーケンスと一致します。

    • 平易な英語による要約: a で始まる各行の最初の数字シーケンスを削除します#

    • :# non-digits|5555|non-digits|5555# non-digits||non-digits|5555

  • s/^#[0-9][0-9]*//

    • アドレスがないので、このコマンドはすべての行に対して実行されます。

    • 置換パターンは/^#[0-9][0-9]*/、連続する数字のシーケンスに一致し、その前には# 固定された行の先頭に。

    • 平易な英語による要約:#各行の先頭から、数字のシーケンス (そのパターンのみ) を削除します。

    • :#5555|non-digits|5555は になります|non-digits|5555が、 # non-digits|5555|non-digits|5555置換パターンが一致しないため変更されません。

答え2

最初のものは一致して置換されます:

#abc99

2番目はそうではありません。

さらに、2 番目では最初の も削除されます#

関連情報