コメントがオプションで始まり、その後に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
より一般的なアプローチ(またはより簡単な方法)があるかどうか疑問に思います。
ベストアンサー1
私は使用しますアドレス範囲。空の行が見える場合は開始second-option
し、空の行が表示されたら終了します。
#!/bin/sed -f
/^#.*second-option/,/^#? *$/s/^# //
# from | to | substitute