
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