나는 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
내가 사용하는 곳 4
은 6
더미 번호입니다.
이 더미 숫자와 명령을 사용하여 다시 표현식을 확인해 보겠습니다 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
첫 번째 변수 주위의 중괄호는 필수는 아니지만 일관성을 유지하는 것이 좋습니다.