변수 sed를 사용하고 싶습니다.
예를 들어, sed -n '1,10p' file
. 따라서 대신 k를 정수 위치로 10
사용하고 싶습니다 .$k
답변1
배경
sed
셸 또는 환경 변수를 확장할 수 없습니다. 대신 Bash 셸이 확장되도록 허용하는 인용 부호를 선택해야 합니다. Bash는 큰따옴표로 묶인 경우 변수를 확장하지만 작은따옴표로 묶인 경우에는 확장하지 않습니다. 작은따옴표를 사용하려면 다음을 수행해야 합니다.
$ sed -n '1,'$k'p' file
알아채다:위에서는 변수를 공개로 설정하여 $k
전달된 매개변수의 따옴표 안에 변수가 포함되지 않도록 했습니다 sed
. 이렇게 하면 쉘 Bash는 $k
설정된 값으로 확장됩니다.
큰따옴표를 사용하는 경우 기호를 사용하여 ${var}
큰따옴표 내의 변수를 보호하여 쉘이 변수를 확장할 수 있습니다. 다음 ${k}
표기법이 필요합니다. 그렇지 않으면 변수 이름 $k
뒤에 가 나타나서 p
Bash 셸이 변수 이름을 로 인식하게 되기 때문입니다 $kp
.
$ sed -n "1,${k}p" file
변수 $k
및 에 전달할 수도 있습니다 p
. 이는 sed 구문이 주소와 명령 사이에 공백을 허용하기 때문에 작동합니다(즉, sed 와 달리 이 형식에서는 공백이 sed에 전달됩니다 ${k}
).
$ sed -n "1,$k p" file
노트:$k
다음 메소드는 설정하지 않으면 실패하므로 주의해서 사용해야 합니다 .
$ printf "blah %d\n" $(seq 10) | sed -n '1,'$k'p'
sed: -e expression #1, char 3: unexpected `,'
예
다음은 ${k}
큰따옴표 변형의 예입니다.
$ k="3"; printf "blah %d\n" $(seq 10) | sed -n "1,${k}p"
blah 1
blah 2
blah 3
쉘 및 환경 변수
이 주제에 대한 자세한 내용을 보려면 다음 U&L Q&A를 읽어 보시기 바랍니다.쉘 변수와 환경 변수 사용법의 차이점은 무엇입니까?.