예:
파일 A에 20줄이 포함되어 있는데 처음 10줄을 삭제했습니다.sed -i 1,10d A.txt
삭제된 10줄을 파일 B에 인쇄하려면 어떤 명령을 작성해야 합니까?
나는 sed -i 1,10d A.txt >> B.txt
어떤 것이 작동하지 않는지 시도했습니다.
답변1
사용 sed
및 sed
스크립트
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
cat
GNU가 있으면 stdout cat
이 stdin과 동일한 파일을 참조한다고 불평할 것입니다. cat|cat
다른 of cat
또는 ksh93
내장 함수를 사용하여 cat
(예: command /opt/ast/bin/cat
not of cat
또는 put /opt/ast/bin
before 를 사용하여 ) 이 문제를 해결할 수 있습니다 $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
행이 삭제됩니다.