저는 스크립팅을 처음 사용하고 두 가지 패턴 사이에 존재하는 텍스트를 추출하는 방법을 배우려고했습니다.sed/awk - 여러 줄에 걸쳐있는 패턴 사이에 텍스트 인쇄
이내 입력 파일 독서가있는 경우 :
Hi I would like
to print text
between these
patterns
내 예상 출력을은 그러나, 나는 여전히 다음과 같은 시나리오에서 두 패턴 사이에 텍스트를 추출하는 방법을 알아낼 수 없습니다입니다 같은 :
내 첫 번째 검색 패턴 즉I would like
to print text
between these
는 "안녕 '이 패턴을 건너 뛸 수 있지만, 일치하는 패턴을 다음과 같은 라인에있는 모든 인쇄 내 두 번째 공학자이다. h 패턴은 "패턴"이며,이 라인이나 그 이상의 모든 라인을 인쇄하는 것을 완전히 피하고 싶습니다.
sed -n '/Hi/,/patterns/p' test.txt
Hi I would like
to print text
between these
patterns
다음 I 시도 [출력] :
`awk ' /'"Hi"'/ {flag=1;next} /'"pattern"'/{flag=0} flag { print }'` test.txt
[출력]
to print text
between these
난 다음 시도
누군가가이를 달성하는 방법을 찾는데 나를 도울 수 있습니까? 사전
답장과 상세한 설명 paxdiablo, 당신의 soln을위한 감사합니다. 매력처럼 작동합니다 :-). 필자의 경우, 같은 줄에 패턴 단어가 반복적으로 나타나거나 "패턴"이전에 단어가 나오지 않는다. 필자의 시나리오에서는 항상 모든 것을 버리고 싶은 줄 시작을 식별 할 수 있으며이 줄은 항상 같은 패턴으로 시작됩니다. 응답을 위해 다시 한번 감사드립니다 .-) –
몇 가지 문제 : 1) "^. * Hi"는 RE에서 "Hi"와 동일합니다. 2) 세 번째 인수로 $ 0을 지정할 필요가 없습니다. * sub(), 3) gsub()은 하나의 어커런스 만 바꾸고 싶을 때 필요하지 않습니다. 4) "{if (echo == 1) {print}}"는 "echo" 그것은 자신의 것입니다. –
Ed. Re 1, 아니, 그렇지 않을 때, 당신이 대체 할 때가 아닙니다. 차이점은 바로 hi 또는 라인을 포함하여 hi까지 포함하는 것입니다. 대부분은 문체이지만 다른 점도 유효합니다. – paxdiablo