모든 것을 삭제하고 패턴 사이에 단어만 남기는 sed 명령이 있습니까? [복사]

모든 것을 삭제하고 패턴 사이에 단어만 남기는 sed 명령이 있습니까? [복사]

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

인용하다

관련 정보