sed 범위 표현식을 사용하여 여러 범위 일치 [닫기]

sed 범위 표현식을 사용하여 여러 범위 일치 [닫기]

고쳐 쓰다:많은 댓글 작성자가 지적했듯이 내 질문의 형식이 올바르게 지정되지 않았습니다. 죄송하고 감사합니다! 내 질문을 업데이트하고 있지만 참조용으로 마지막 질문을 남겨 둡니다.

업데이트된 질문 주어진 두 표현식(예: 정규 표현식) 사이의 줄을 추출하고 파일 끝에 도달할 때까지 이 작업을 반복하고 싶습니다.

따라서 주어진 입력은 다음과 같습니다.

apple
hello
banana
world
brave
new
blueberries
hello
orange
fiddle
world
cup

및 패턴 hellosum world, 출력을 원합니다.

hello
banana
world
hello
orange
fiddle
world

도움이 된다면 겹치는 부분이 없다고 가정할 수 있습니다. 즉, hello이전에 두 개의 를 만난 적이 없습니다 world.

오래된 질문

seq 20 | sed -n '4,6p'

다음을 출력합니다.

4
5
6

하지만 내가 원하는 것은 :

4
5
6
14
15
16

sed(또는 awk 또는 grep)를 사용하여 이를 수행할 수 있는 방법이 있습니까? 감사해요!

답변1

사용해 보는 sed건 어떨까요?

seq 20|sed -n '4,6p;14,16p'

또는 사용awk

seq 20|awk 'NR>3&&NR<7||NR>13&&NR<17'

줄 번호가 아닌 줄 내용을 일치시키려는 경우 이 두 가지 방법 중 하나를 사용할 수 있습니다.

seq 20|sed -n '/^4$/,/^6$/p;/^14$/,/^16$/p'
seq 20|awk '/^4$/,/^6$/;/^14$/,/^16$/'

답변2

표현식 sed은 4~6행을 인쇄하거나, paddress 로 지정된 행 범위에 대한 명령을 호출합니다 4,6. 14~16행을 추가로 인쇄하려면 paddress 를 호출하세요 14,16. 또는 개행 문자 로 구분하거나 인수와 함께 여러 옵션을 ;제공하여 -e추가 편집 표현식을 추가 할 수 있습니다.

$ seq 20 | sed -n -e '4,6p' -e '14,16p'
4
5
6
14
15
16

의 경우에도 awk비슷한 방법으로 할 수 있습니다.

$ seq 20 | awk 'NR == 4, NR == 6; NR == 14, NR == 16'
4
5
6
14
15
16

또는 10개 행으로 구성된 각 그룹에 항상 4, 5, 6행을 원하는 경우:

$ seq 30 | awk 'NR%10 == 4, NR%10 == 6'
4
5
6
14
15
16
24
25
26

GNU를 사용하면 sed동일한 효과를 얻을 수 있습니다

sed -n -e '4~10p' -e '5~10p' -e '6~10p'

답변3

당신이 사용하고 있는 명령 sed은 당신이 생각하는 대로 작동하지 않습니다. 4~6호선에서만 운행됩니다. 4,6입력한 명령은 행 범위이며, 실행하면 그 효과를 더욱 명확하게 볼 수 있습니다 seq 5 15 | sed -n '4,6p'. 그런 다음 베어 메탈은 p단순히 라인을 인쇄합니다.

grep원하는 것을 수행하는 한 가지 방법은 다음과 같습니다.

seq 20 | grep -e '[456]'

이것은 완전히 정확하지 않습니다. 왜냐하면 당신이 실행하면

seq 50 | grep -e '[456]'

해당 숫자로 끝나지 않고 4, 5 또는 6으로 시작하는 숫자가 표시됩니다. 아마도 근거 없는 가정일지라도 검색 문자열로 끝나는 줄을 인쇄하기를 원한다고 가정합니다.

원하는 일을 더 완전하게 설명하기 위해 질문을 편집하면 더 나은 도움을 얻을 수 있습니다.

답변4

내가 생각해낸 솔루션은 @@ 게시된 솔루션과 매우 비슷해 보이지만 실제로는 다른 기술을 사용합니다. 이중 주소 형식을 사용했습니다. print 에 첫 번째 주소를 사용하는 대신 4, 5, & 6이를 사용하여 일치시킨 4, 14, etc.다음 두 번째 주소의 구문을 사용하여 각 인스턴스에 +N해당하는 및 를 인쇄했습니다 *5.*6

결과 명령은 다음과 같습니다

seq 20 | sed -n 4~10,+2p

관련 정보