sed 내부의 sed 명령

sed 내부의 sed 명령

sed다음과 같이 내부에서 명령을 실행할 수 있습니까 sed?

sed -i.bak -e '${sed -n 1,1p file.txt},$d' output.file

file.txt첫 번째 행의 번호를 입력 매개변수로 사용하고 output.file해당 행 이후의 모든 행을 삭제하고 싶습니다 .

답변1

sed이것은 내부 명령이 아니며 sed실제 호출 전에 쉘이 수행하는 대체 명령일 뿐입니다 sed. 올바른 따옴표와 괄호를 사용하면 작업이 완료됩니다.

sed -i.bak -e "$(sed -n 1,1p file.txt),\$d" output.file

큰따옴표는 프로세스 내 대체를 허용하며(작은따옴표는 허용하지 않음) $()구문은 내부 명령의 결과가 캡처되어 대체됨을 의미합니다. 변수로 해석되는 것을 방지하려면 이스케이프 가 \$필요합니다 .$d

동일한 내용을 작성하는 덜 혼란스러운 방법은 다음과 같습니다.

n=$(sed -n 1,1p file.txt)
sed -i.bak -e "${n}\$d" output.file

또한 따옴표로 묶인 다른 문자열(따옴표가 없는 문자열 포함)을 함께 묶어서 이렇게 작성할 수도 있습니다 "${n}"',$d'.bash

또한 sed -n '1{p;q}' file.txt. 첫째, 줄 번호만 지정하면 범위를 쓸 필요가 없습니다. 둘째, 첫 번째 줄( )을 인쇄한 후 종료하면 q아무 이유 없이 전체 파일을 읽지 않으므로 더 효율적입니다. 첫 번째 줄이므로 -n생략 가능합니다. 또는 head -n1 file.txt.

관련 정보