특정 패턴과 일치하는 줄의 주석 처리를 해제하려면 "sed"를 사용하세요.

특정 패턴과 일치하는 줄의 주석 처리를 해제하려면 "sed"를 사용하세요.

주석이 옵션으로 시작하고 그 뒤에 한 줄 이상의 주석이 오는 파일의 특정 줄의 주석 처리를 제거하려고 합니다. 다음은 처리하려는 파일의 최소 예입니다( 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

답변2

$ sed -e '
    /^#[[:blank:]]*second-option[)]$/!b
    :a;$!N;s/\\$/&/;ta
    s/\(\n\)#/\1/g;s/^#//
  ' file

bash명령줄 에서Posix sed

또는 Gnu sed를 사용하여 다음을 수행하세요.

 $ sed -e '/^#\s*second-option[)]$/,/[^\]$/s/^#//' file

관련 정보