이 파일이 있습니다 :
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
이 파일에서 특정 문자열을 검색하고이 문자열 앞의 {
모든 것을 여는 부분까지,이 문자열 뒤의 모든 항목을 끝까지 인쇄하고 싶습니다 }
. sed로 이것을 달성하려고했지만 범위의 모든 것을 인쇄하려고하면 /{/,/string2/
sed가 이것을 인쇄합니다.
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
문자열 "string2"를 검색하면 다음과 같은 출력이 필요합니다.
sometext2{
string2
string3
}
감사.
grep -n '' <infile | sed ...
. sed
명령은 수정이 필요합니다; 특히 최상위 앵커 를 찾는 /
주소 /
비트 ^
. 따라서 내 대답을 사용하는 경우 다음을 수행 할 수 grep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'
있습니다.. 모든 출력 행은 원래 파일의 행 번호 앞에 콜론 등이 붙 1:sometext1{\n2:string1
습니다. sed
각 출력 라인이 숫자로 열리는 것을 제외하고는 이전에 필터링 한 것만 필터링합니다.