sed 명령에서 변수를 어떻게 사용합니까?


266

나는 대체 할 수있는 다음 코드 시도 QQ로를 ZZ하지만, 내가하고 싶은 일을하지 않습니다

var1=QQ
sed -i 's/$var1/ZZ/g' $file

그러나이 코드는 내가 원하는 것을 수행합니다.

sed -i 's/QQ/ZZ/g' $file

변수를 sed어떻게 사용 합니까?



답변:


358

쉘은 변수 확장을 담당합니다. 문자열에 작은 따옴표를 사용하면 그 내용이 문자 그대로 처리되므로 sed이제 모든 리터럴을 $var1로 바꿉니다 ZZ.

큰 따옴표 사용

공백을 유지하면서 쉘이 변수를 확장하도록하려면 큰 따옴표를 사용하십시오.

sed -i "s/$var1/ZZ/g" "$file"

대체 문자열에 따옴표 문자가 필요한 경우 셸에서 해석 할 백 슬래시를 앞에 추가해야합니다. 다음 예제에서 문자열 quote me은로 대체됩니다 "quote me"(문자 &는로 해석 됨 sed).

sed -i "s/quote me/\"&\"/" "$file"

작은 따옴표 사용

쉘 메타 문자가 많은 경우 패턴에 작은 따옴표를 사용하고 변수에 큰 따옴표를 사용하십시오.

sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"

내가 s,pattern,replacement,대신에 어떻게 사용하는지 주목 s/pattern/replacement/하십시오 . /in 과의 간섭을 피하기 위해 사용 했습니다 \0/.

그런 다음 쉘 sed은 다음 인수와 함께 위의 명령을 실행합니다 ( pattern=bert및 가정 file=text.txt).

-i
s,bert,Say hurrah to &: \0/,
text.txt

경우 file.txt포함 bert, 출력은 다음과 같습니다

Say hurrah to bert: \0/

2
이 쉼표로 구분 된 양식을 사용하여 "/ g"옵션을 어떻게 전달합니까?
blong

6
@ b.long g옵션이므로 s,foo,bar,g대신 전달하십시오 .
Lekensteyn

1
작은 따옴표 예제는 특히 유용하며 정규식 패턴을 사용하여 sed를 꽤 멋지게 다루고 있습니다!
Brian Thomas

\\0대신에 사용하려는 유혹이있는 경우 작은 따옴표로 묶을 \0때 수행하면 안됩니다 \0. 그렇지 않으면 전체 일치 대신 sed리터럴 \0대신 패턴을 대체합니다 .
Lekensteyn

나를 위해 트릭을 했어.
jimh

114

sed큰 따옴표 를 사용하여 변수를 사용할 수 있습니다 .

sed -i "s/$var/r_str/g" file_name

/변수에 슬래시가 있으면 아래처럼 다른 구분 기호를 사용하십시오.

sed -i "s|$var|r_str|g" file_name

7
/변수에 슬래시가 있으면 => 이것은 나를 저장했습니다! 내 변수는 URL이며을 포함 /합니다. |구분 기호 로 사용하도록 전환하면 내 문제가 해결되었습니다.
sonlexqt

"변수에 슬래시가있는 경우"
Tiina
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.