![모든 것을 삭제하고 패턴 사이에 단어만 남기는 sed 명령이 있습니까? [복사]](https://linux55.com/image/139589/%EB%AA%A8%EB%93%A0%20%EA%B2%83%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EA%B3%A0%20%ED%8C%A8%ED%84%B4%20%EC%82%AC%EC%9D%B4%EC%97%90%20%EB%8B%A8%EC%96%B4%EB%A7%8C%20%EB%82%A8%EA%B8%B0%EB%8A%94%20sed%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
sed
다 삭제하고 패턴 사이에 단어만 남기는 명령어?
나는 시도했다:
$ sudo sed -i '/from/,/until/!d'
그러나 첫 번째 줄 아래에 일부 단어를 남기고 단어 대신 패턴 사이에 전체 줄을 남깁니다.
텍스트로 가득 찬 파일이 있는데 "from" 텍스트 "until" 사이의 텍스트만 유지하고 나머지는 모두 삭제하고 싶습니다.
나는 노력한다
for file in `ls`
do
echo "`awk '/from/,/until/' $file`" > $file
done
두 줄을 남겼습니다. 첫 번째는 위 패턴의 텍스트이고 첫 번째는 빈 새 줄입니다.
답변1
두 패턴 사이의 모든 항목을 인쇄하고 나머지는 모두 삭제하려는 것처럼 들립니다. 이 같은:
$ echo -e "a\nb\nc\nd\ne" | sed -ne '/b/,/d/p'
b
c
d
시작 및 종료 패턴은 어디에 있습니까 /b/
? 다음을 사용하여 /d/
유사한 접근 방식을 수행할 수도 있습니다 .awk
$ echo -e "a\nb\nc\nd\ne" | awk '/b/,/d/'
b
c
d
무늬
시작/끝 패턴으로 무엇을 사용할지 결정할 때는 패턴을 최대한 명확하게 디자인해야 합니다.
예를 들어:
$ cat afile
something
something
one
two
some start
start
what
did
you start
done
end
the end
이제 /start/
줄 뒤에 단어가 오는 항목이 포함된 줄만 선택합니다 /done/
.
$ sed -ne '/^start$/,/^done$/p' afile
start
what
did
you start
done