정수 변수와 함께 sed 사용

정수 변수와 함께 sed 사용

변수 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뒤에 가 나타나서 pBash 셸이 변수 이름을 로 인식하게 되기 때문입니다 $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를 읽어 보시기 바랍니다.쉘 변수와 환경 변수 사용법의 차이점은 무엇입니까?.

인용하다

관련 정보