단일 명령을 사용하여 파일에서 삭제된 줄을 새 파일로 인쇄하는 방법은 무엇입니까?

단일 명령을 사용하여 파일에서 삭제된 줄을 새 파일로 인쇄하는 방법은 무엇입니까?

예:
파일 A에 20줄이 포함되어 있는데 처음 10줄을 삭제했습니다.sed -i 1,10d A.txt

삭제된 10줄을 파일 B에 인쇄하려면 어떤 명령을 작성해야 합니까?

나는 sed -i 1,10d A.txt >> B.txt어떤 것이 작동하지 않는지 시도했습니다.

답변1

사용 sedsed스크립트

1,10{
    w otherfile
    d
}

이렇게 하면 1~10행이 파일에 기록되고 otherfile입력에서 제거됩니다.

원본 파일의 내부 편집( sed여기서는 GNU 사용):

sed -i '1,10{w B.txt
        d}' A.txt

파일 이름을 구분하려면 개행 문자가 필요합니다. 또는,

sed -i -e '1,10{w B.txt' -e 'd}' A.txt

답변2

그리고 ksh93:

{ head >> B.txt; cat 1<>; A.txt; } < A.txt

catGNU가 있으면 stdout cat이 stdin과 동일한 파일을 참조한다고 불평할 것입니다. cat|cat다른 of cat또는 ksh93내장 함수를 사용하여 cat(예: command /opt/ast/bin/catnot of cat또는 put /opt/ast/binbefore 를 사용하여 ) 이 문제를 해결할 수 있습니다 $PATH.

리디렉션 1<>;연산자는 표준 1<>연산자처럼 동작합니다(읽기+쓰기 모드에서 열림).잘림 없음) 단, 파일도 잘립니다.결국리디렉션 명령이 성공한 경우.

답변3

귀하의 요구 사항이 다음과 같다고 가정해 보겠습니다.

  • 파일 A의 처음 10줄을 파일 B에 씁니다.
  • 파일 A의 처음 10줄 삭제sed -i 1,10d A.txt

다음 방법으로 이를 수행할 수 있습니다.

head -10 A.txt > B.txt
sed -i 1,10d A.txt

첫 번째 명령은 A.txt 파일의 처음 10줄을 B.txt에 기록합니다.
두 번째 명령은(귀하의 제안에 따라) A.txt 파일의 처음 10줄을 삭제합니다.

처음 10개 행을 얻으려면 다음을 수행해야 합니다.이 줄을 삭제하기 전에

답변4

sed와 파이프를 사용하여 이를 달성할 수 있습니다.

sed -n '1,10p' a.txt > b.txt | sed -i '1,10d' a.txt

처음 10개 행이 a.txt복사된 b.txt다음 처음 10개 a.txt행이 삭제됩니다.

관련 정보