이것작동하지 않는 것 같습니다
The next example would delete everything between "ONE" and "TWO:"
#!/bin/sh
sed '
/ONE/ {
# append a line
N
# search for TWO on the second line
/\n.*TWO/ {
# found it - now edit making one line
s/ONE.*\n.*TWO/ONE TWO/
}
}' file
1과 2 사이의 모든 것을 삭제하고 싶었습니다. 포함된 파일을 사용해 보았습니다.
[user5@mailserver ~]$ cat file
ONE
hello
TWO
그러나 출력은 다음과 같습니다
[user5@mailserver ~]$ ./test
ONE
hello
TWO
ONE TWO
나는 그것을 바로잡으려고 노력할 것이라고 생각했지만 그럴 수 없었다.
답변1
이것이 일을 할 것이다
sed '/^ONE/,/TWO/{/^ONE/!{/TWO/!d}}' file
/^ONE/,/TWO/
ONE
up으로 시작하는 첫 번째 줄을 보세요 .TWO
{/^ONE/!
내 줄이 다음으로 시작하지 않는 경우ONE
{/TWO/!d}}
내 줄이 TWO
다음으로 시작하지 않고 다음을 수행하는 경우delete
위의 내용을 요약하면 다음과 같습니다.
ONE
up 으로 시작하는 모든 것을 찾아보세요 TWO
. 또 다른 확인을 실행합니다. 즉, "ONE TWO"와 일치하지 않는 항목을 찾아 and
나머지를 삭제합니다.
답변2
나는 사용할 것이다
sed 'N;N;s/ONE.*\n.*TWO/ONE TWO/' file
이 두 작업은 작업이 작동할 N
수 있도록 세 행을 함께 연결합니다 .s
(이것은 또한 원래 예와 매우 유사합니다).