
grep
백슬래시로 이스케이프된 여러 줄을 긴 한 줄로 처리하는 것과 같은 도구를 만들려면 어떻게 해야 합니까 ?
다음과 같은 파일이 있다고 가정해 보겠습니다.
testvar=test1 \
test2 \
test3
othervar=oth1 \
oth2
지금 grep
testvar에 대해 반환하면 반환되지만 testvar=test1 \
반환되도록 할 수 있는 방법이 있습니까 testvar=test1 test2 test3
?
이스케이프된 여러 줄을 단일 줄로 처리하는 방법은 어느 정도입니까?
메모: 를 사용하여 이 작업을 수행할 수 없는 경우 grep
와 같은 다른 도구를 사용하여 이 작업을 수행하는 방법 sed
이나 awk
동일한 결과를 얻는 방법에 대한 힌트도 환영합니다.
답변1
awk
필드 구분 기호와 레코드 구분 기호를 사용 사례에 맞게 설정 하면 다음과 같습니다.
awk 'BEGIN { FS="\n"; RS ="" } /testvar/' yourfile
testvar=test1 \
test2 \
test3
매뉴얼 항목을 참조하세요.여러 줄 레코드.
답변2
다음과 같이 해당 줄을 연결하는 것으로 전처리할 수 있습니다.
awk 'match($0,/\\+$/) && RLENGTH % 2 {
sub(/\\$/,""); printf "%s", $0; next
}
{print}' | grep ...