A.txt라는 파일이 있고 B.txt 파일을 생성하여 옆에 파이프 기호가 있는 텍스트를 처음에 쓰고 그 뒤에 파일 A의 줄 수가 표시되도록 해야 합니다(여기에는 10줄이 있습니다). 예 ), A 파일의 내용입니다.
참고: 이 작업은 한 줄 명령으로 최대한 쉽게 수행해야 합니다.
산출:
Some text | 10
(Contents of file A)
파이프 기호 없이 이것을 시도했지만 작동하지 않았습니다.
(echo 'Some Text';
sed -i 1,10d A.txt ;
wc -l A.txt ;cat A.txt)
>> B.txt
답변1
sed -i 1,10d A.txt
A.txt에서 1~10행 삭제그러나 아무것도 인쇄되지 않습니다. cat
파일에 대한 후속 호출(동일한 하위 쉘 내에서도)은 인쇄됩니다.수정됨원본 내용이 아닌 파일 내용입니다.
답변2
에 10개의 행만 있고 를 A.txt
사용하여 해당 행을 삭제하면 sed
다음은 cat A.txt
출력되지 않고 wc
0개의 행이 보고됩니다.
아마도 다음과 같은 것을 원할 것입니다.
(
echo "Some text | $(wc -l < A.txt)"
cat A.txt
) > B.txt
답변3
lines=$( wc -l A.txt ) ; printf "Some Text | %s\n" ${lines%% *} > B.txt ; cat A.txt >> B.txt
의 출력에는
wc
파일 이름이 포함되어 있으므로 이를 제거해야 합니다. 이 작업은 셸의 기본 접미사 제거 기능을 사용하여 수행됩니다${var%%glob}
.어떤 경우에는 오작동할 수 있으므로 개인적
printf
으로 기본적으로 사용하는 것을 선호합니다 .echo
echo
두 번의 출력 리디렉션을 수행하면 출력 파일에 이전 코드 한 줄 실행의 데이터가 포함되지 않습니다. 첫 번째 리디렉션은
>
이전 버전을 덮어씁니다.