중복 기호 제거 및 선 조정

중복 기호 제거 및 선 조정

정확히 다음과 같은 텍스트 파일(test.txt)이 있습니다(인스턴스당 동일한 수의 옵션).

# a comment

first: info about first:  option1 \
                          option2 \
                          option3

second: info about second: option1 \
  option2 \
  option3

#third: info about third: option1 \
#                         option2 \
#                         option3

fourth: info about fourth: option1 \
                           option2 \
                           option3 \

텍스트를 다음과 같이 재구성하고 싶습니다.

a comment first: info about first: option1 option2 option3 
second: info about second: option1 option2 option3 
third: info about third: option1 option2 option3 
fourth: info about fourth: option1 option2 option3

답변1

단일 sed 프로그램 사용:

sed -E '
    # remove leading comment chars
    s/^[[:blank:]]*#+[[:blank:]]*//

    # label "a" for branching
    :a
    # if trailing slash:
    /\\$/ {
        # read next line
        N
        # remove backslash, newline, leading whitespace and comment char 
        s/\\\n[[:blank:]]*#*[[:blank:]]*/ /
        # branch to label "a"
        ba
    }

    # remove blank lines
    /^[[:blank:]]*$/d
' test.txt

그러나 Perl은 매우 컴팩트합니다. 단락( )을 읽고 단락의 각 줄에서 -00선행 공백과 주석 문자( /m및 수정자)를 바꾸고 후행 백슬래시 개행 문자를 제거합니다./g

perl -00 -lanE 's/^\s*#*\s*//mg; s/\\(?:\Z|\n)/ /g; say' test.txt

답변2

sed 's/^#/ /g;s/\\/ /g' file | xargs | sed 's/option3 /option3 \n/g'

a comment first: info about first: option1 option2 option3 
second: info about second: option1 option2 option3 
third: info about third: option1 option2 option3 
fourth: info about fourth: option1 option2 option3

sed 's/^#/ /g#공백으로 바꾸고 문자열의 위치 ^와 일치합니다 . #그런 다음 sed s/\\/ /g'백슬래시를 공백으로 바꿉니다.\

xargs단어 사이에 동일한 공백을 배치하고 만듭니다.

마지막으로 sed각 단어 "option3" 뒤에 새 줄을 추가합니다.

관련 정보