특정 문자열이 있는 줄의 시작 부분에서 전체 텍스트를 제거하는 방법

특정 문자열이 있는 줄의 시작 부분에서 전체 텍스트를 제거하는 방법

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

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

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

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

관련 정보