ファイルの特定の行のコメントを解除しようとしています。コメントはオプションで始まり、その後に1行以上のコメントが続きます。これが私が処理しようとしているファイルの最小限の例です(example.txt
):
# Ignore this one
# first-option)
# something-something x \
# run-something-else y \
# run-after-this z \
# set-some-config-var 10 10
# Uncomment this one
# second-option)
# something x \
# run-something-else y \
# run-something-else-again z \
# run-after-this-something z \
# set-some-config-var 10 10 \
# set-some-config-var cool
そして私の素朴な解決策(test.sed
)、最初に目的のパターンを見つけ、次に繰り返し置換を適用することによって:
#!/usr/bin/env sed
/#.*second-option/{
s/# //; p; n;
s/# //; p; n;
s/# //; p; n;
s/# //; p; n;
s/# //; p; n;
s/# //; p; n;
s/# //; p; n;
}
出力:
$ sed -n -f test.sed example.txt
second-option)
something x \
run-something-else y \
run-something-else-again z \
run-after-this-something z \
set-some-config-var 10 10 \
set-some-config-var cool
私はすべてsed
のオプションに精通しているわけではありませんが、これを行うためのより一般的な方法(またはより冗長でない方法)があるかどうか興味がありました。
アドレス範囲を使用してこれを行います。second-option
空白行が表示されたときに開始し、空白行が表示されたときに終了します。
#!/bin/sed -f
/^#.*second-option/,/^#? *$/s/^# //
# from | to | substitute
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加