sed 및 쉘 변수를 사용하여 한 파일에서 다른 파일로 줄 복사

sed 및 쉘 변수를 사용하여 한 파일에서 다른 파일로 줄 복사

나는 sed와 일부 쉘 변수를 사용하여 한 파일에서 다른 파일의 끝으로 줄을 복사하는 방법을 알아 내려고 노력해 왔습니다.

sed -n "$var1,$var2'p'" file1.txt > file2.txt

나는 이것과 유사한 변형을 많이 시도했지만 시가는 없습니다. 누군가 나에게 올바른 구문을 말해 줄 수 있습니까? 감사해요.

편집하다

그래서 아래 제안 사항을 시도했지만 이제 이 오류가 발생합니다.

sed: -e expression #1, char 2: invalid usage of line address 0
sed: -e expression #1, char 2: unknown command: `*'"

편집하다

좋습니다. 이러한 제안이 도움이 되었습니다. 다른 문제를 발견했고 이제 스크립트가 완벽하게 실행됩니다. 매우 감사합니다!

답변1

프레디의 대답유효하지만설명이 부족하다. 아마도 원하는 형식 sed은 다음과 같습니다.

sed -n 4,6p file1.txt

내가 사용하는 곳 46더미 번호입니다.

이 더미 숫자와 명령을 사용하여 다시 표현식을 확인해 보겠습니다 echo.

$ var1=4
$ var2=6
$ echo "$var1,$var2'p'"
4,6'p'

's를 s로 묶었 기 때문에 "문자 그대로 해석되며 'sed 명령에 대해 문자 그대로 s가 있습니다. 따라서 명령을 실행하려고 하면 다음과 같습니다.

$ sed -n "$var1,$var2'p'" file1.txt
sed: -e expression #1, char 4: unknown command: `''

해결책

'표현식에서 s를 제거할 수 있지만 이렇게 하면 변수 이름이 $var2p로 변경됩니다. 따라서 Freddy가 제안한 대로 {…}변수 이름에 명시적인 괄호를 사용할 수 있습니다 . 즉

sed -n "${var1},${var2}p" file1.txt

명령 앞에 echo를 추가하여 이것이 작동하는지 테스트할 수 있습니다. 또 다른 형식은

sed -n "$var1,$var2"p file1.txt

하지만 제 생각에는 가독성이 떨어진다고 생각합니다.

드디어 스틸드라이버로지적, 파일에 추가하려는 경우 >> file2.txt대신 을 사용하세요 > file2.txt.

답변2

변수 이름 주위에 중괄호를 사용하십시오.

sed -n "${var1},${var2}p" file1.txt > file2.txt

첫 번째 변수 주위의 중괄호는 필수는 아니지만 일관성을 유지하는 것이 좋습니다.

관련 정보