특정 문자열이 포함된 줄의 시작 부분부터 전체 텍스트를 삭제하는 방법

특정 문자열이 포함된 줄의 시작 부분부터 전체 텍스트를 삭제하는 방법

sed -n '/string/,$p' file >> otherfile특정 문자열이 있는 줄의 텍스트를 다른 파일로 복사하는 데 사용합니다 .

이제 복사한 텍스트를 원본 파일에서 삭제하고 싶습니다. sed와 awk로 다른 방법을 시도했지만 아무 효과가 없었습니다.

sed를 사용하여 특정 문자열이 포함된 파일의 시작 줄에서 텍스트를 삭제하는 방법은 무엇입니까?

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

아니면 sed로 복사하는 것보다 잘라내기가 더 쉬우며 대신 명령은 무엇입니까?

답변1

당신은 할 수 있습니다주소가 지정된 범위의 행을 새 파일에 기록한 다음범위 삭제 - 까다로운 부분은 d명령이 출력 파일 이름의 일부로 처리되는 것을 방지하는 것입니다. GNU sed에서는 다음을 사용하여 쓰기와 삭제를 별도의 표현식으로 분할하여 이를 수행할 수 있습니다.-e

otherfile중요 참고 사항: 추가되지 않고 잘립니다 .

sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file

답변2

아니면 에드를 사용하세요!

ed -s file <<< $'/textb/,$w otherfile\n/textb/,$d\nw\nq'

귀하의 의견을 고려하여파일의:

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

명령 을 실행한 후 ed,파일다음과 같이 됩니다:

texta

texta1

(여기서 서식에서는 사라지는 빈 줄이 끝에 있습니다.) 그리고다른 파일다음을 포함합니다:

textb    <- string, delete rest of the text from here

textb1

textc

textc1

명령 ed은 다음과 같습니다:

  • /textb/,$w otherfile-- 해당 행 범위를 다음에 쓰십시오.다른 파일
  • /textb/,$d-- 해당 행 범위를 삭제합니다.
  • w-- 변경된 파일을 디스크에 쓰기
  • q-- 에드 그만둬

답변3

이 명령을 사용하여 sed -n '/string/,$p' file >> otherfile하나의 줄에서 모든 줄을 추출하는 경우포함하는 string파일의 끝( $)에서 다른 파일로 이동합니다.

그 보완을 추출하는 가장 쉬운 방법은 일치를 보완하는 것입니다.

sed '/string/,$d' file >> someOtherDifferentFile

그리고 원본 파일을 업데이트하고 싶거나 업데이트해야 하는 경우 결과를 다시 복사하면 됩니다.

sed 옵션이 수행하는 작업 -i이므로 원본 파일이 업데이트됩니다.

sed -i.bak '/string/,$d' file

관련 정보