![sed는 변수로 전달될 때 숫자를 인식하지 못합니다.](https://linux55.com/image/96302/sed%EB%8A%94%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EC%A0%84%EB%8B%AC%EB%90%A0%20%EB%95%8C%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%9D%B8%EC%8B%9D%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%A9%EB%8B%88%EB%8B%A4..png)
이 표현은:
FN=27
LN=145
cat $FILENAME | sed -n $FN,$LNp
다음 오류와 함께 실패합니다: "sed: -e 표현식 #1, 문자 3: 예기치 않은 `,'" 그러나 실제 숫자를 사용하면 예상한 결과를 얻습니다. 포함된 특수 문자 및 후행 또는 선행 공백이 없습니다.
cat $FILENAME | sed -n 27,145p
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
$LNp
변수가 설정되지 않은 경우 sed
명령은 다음과 같습니다(변수 인용을 잊어버렸기 때문에 기본값은 IFS라고 가정).
sed -n 27,
원하는 곳은 다음과 같습니다.
sed -n "$FN,${LN}p" < "$FILENAME"
쉘이 p
변수 이름의 일부가 되지 않도록 지시합니다( sed -n "$FN,$LN"p
이것도 괜찮습니다).
또는 번째 줄을 찾자마자 더 효율적으로 중지합니다 sed
.$LN
sed "$FN,\$!d;${LN}q" < "$FILENAME"
또는
tail -n "+$FN" < "$FILENAME" | head -n "$((LN - FN + 1))"