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