끝에 "\"가 있는 다음 예에서는 \ 및 EOL 문자를 제거해야 합니다.
line 1\
line 2
line 3
line 4\
line 5
출력은
line 1 line 2
line 3
line 4 line 5
vi를 사용하면 다음과 같이 위의 내용을 얻을 수 있습니다.:%s/\//n//g
하지만 터미널에서 이 작업을 수행하면 작동하지 않습니다. 어떤 제안이 있으십니까?
답변1
흠... 제가 시도한 어떤 Vi 편집기에서도 Vi 교체가 작동하지 않습니다. 아마도 :%s/\\\n/ /g
Vim에서는 작동하지만 Vi에서는 작동하지 않는다는 의미일 것입니다 .
$ sed '/\\$/{N;s/\\\n/ /;}' file
line 1 line 2
line 3
line 4 line 5
이는 현재 줄이 백슬래시로 끝나는지 여부를 감지하고, 그렇다면 다음 줄을 추가하고( sed
그 사이에 개행 문자가 추가됨) 백슬래시와 개행 문자를 공백 문자로 바꿉니다.
연속된 두 줄 끝에 백슬래시가 있으면 실패합니다. 이렇게 하려면 다음과 같은 것을 사용하십시오.
sed ':top;/\\$/{N;s/\\\n/ /;btop;}' file
여기서 백슬래시가 있는 줄이 처리되면 코드는 처음으로 다시 이동합니다.
마지막 스크립트의 주석이 달린 버전 sed
:
:top; # define label "top"
/\\$/{ # the line ends with backslash
N; # append next line to pattern space with embedded newline
s/\\\n/ /; # substitute backslash and newline with space
btop; # branch to "top"
}
# (implicit print)