sed에서 큰 따옴표와 작은 따옴표를 어떻게 이스케이프합니까?
내가 찾을 수 있듯이 작은 따옴표를 사용하면 내부의 모든 것이 문자 그대로 간주됩니다. 내 대체품을 원합니다. 하지만 작은 따옴표 나 큰 따옴표가있는 문자열도 찾고 싶습니다.
예를 들면
sed -i 's/"http://www.fubar.com"/URL_FUBAR/g'
"http://www.fubar.com"을 URL_FUBAR로 바꾸고 싶습니다. sed는 내 // 또는 내 큰 따옴표를 어떻게 인식해야합니까?
도움을 주셔서 감사합니다!
편집 : 사용할 수 s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g
있습니까?
\ 실제로 작은 따옴표 안의 문자를 이스케이프합니까?
이 sed
명령을 사용하면 다음과 /
같이 s
명령 에서 구분 기호 대신 다른 문자를 사용할 수 있습니다 .
sed 's#"http://www\.fubar\.com"#URL_FUBAR#g'
또는
sed 's,"http://www\.fubar\.com",URL_FUBAR,g'
큰 따옴표는 문제가되지 않습니다. 작은 따옴표를 일치 시키려면 두 가지 유형의 따옴표를 전환하십시오. 작은 따옴표로 묶인 문자열은 작은 따옴표를 포함 할 수 없습니다 (이스케이프 된 것조차 포함하지 않음).
점을 한 문자와 일치하는 sed
정규식 패턴 .
이 아닌 점으로 해석 하려면 점을 이스케이프해야합니다 .
작은 따옴표와 관련하여 문자열 let's
을 let us
다음 으로 바꾸는 데 사용되는 아래 코드를 참조하십시오 .
명령:
echo "hello, let's go"|sed 's/let'"'"'s/let us/g'
결과:
안녕, 가자
작은 따옴표 안에서 작은 따옴표를 이스케이프하기는 어렵습니다. 이 시도:
sed "s@['\"]http://www.\([^.]\+).com['\"]@URL_\U\1@g"
예:
$ sed "s@['\"]http://www.\([^.]\+\).com['\"]@URL_\U\1@g" <<END
this is "http://www.fubar.com" and 'http://www.example.com' here
END
생산하다
this is URL_FUBAR and URL_EXAMPLE here
내 문제는 ""
sed 표현식 자체 내부에 동적 변수가 있기 때문에 표현식 외부 가 필요하다는 것입니다. 그래서 실제 해결책은 "
sed 정규식 내부를 [\"]
.
그래서 내 완전한 bash는 다음과 같습니다.
RELEASE_VERSION="0.6.6"
sed -i -e "s#value=[\"]trunk[\"]#value=\"tags/$RELEASE_VERSION\"#g" myfile.xml
여기 있습니다 :
#
sed 구분자입니다.
[\"]
= "
정규식
값 = \"tags/$RELEASE_VERSION\"
= 내 대체 문자열, 중요한 것은 \"
따옴표에 대해서만 있습니다.
sed에서 큰 따옴표를 이스케이프하는 것은 절대적으로 필요할 수 있습니다. 예를 들어, 전체 sed 표현식에서 큰 따옴표를 사용하는 경우 (셸 변수를 사용하려는 경우에 수행해야 함).
다음은 sed에서 이스케이프를 다루지 만 bash에서 다른 인용 문제를 캡처하는 예제입니다.
# cat inventory
PURCHASED="2014-09-01"
SITE="Atlanta"
LOCATION="Room 154"
반복해서 사용할 수있는 sed 스크립트를 사용하여 방을 변경하고 싶으므로 입력을 다음과 같이 가변 화한다고 가정 해 보겠습니다.
# i="Room 101" (these quotes are there so the variable can contains spaces)
이 스크립트는 전체 행이 없으면 추가하거나 sed를 사용하여 해당 행을 텍스트와 $ i 값으로 대체합니다.
if grep -q LOCATION inventory; then
## The sed expression is double quoted to allow for variable expansion;
## the literal quotes are both escaped with \
sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory
## Note the three layers of quotes to get echo to expand the variable
## AND insert the literal quotes
else
echo LOCATION='"'$i'"' >> inventory
fi
추신 : 주석을 파싱 할 수 있도록 위의 스크립트를 여러 줄로 작성했지만 다음과 같은 명령 줄에서 한 줄로 사용합니다.
i="your location"; if grep -q LOCATION inventory; then sed -i "/^LOCATION/c\LOCATION=\"$i\"" inventory; else echo LOCATION='"'$i'"' >> inventory; fi
Prompt% cat t1
This is "Unix"
This is "Unix sed"
Prompt% sed -i 's/\"Unix\"/\"Linux\"/g' t1
Prompt% sed -i 's/\"Unix sed\"/\"Linux SED\"/g' t1
Prompt% cat t1
This is "Linux"
This is "Linux SED"
Prompt%
참고 : BASH 변수를 포함하는 sed 표현식 "
은 변수가 올바르게 해석 되도록 큰 따옴표 ( )로 묶어야합니다.
- https://askubuntu.com/questions/76808/how-do-i-use-variables-in-a-sed-command
- sed의 명령에서 변수를 사용하는 방법은 무엇입니까?
당신은 경우 도 을 $ BASH 변수 (권장 연습)을 두 번 인용
... 다음과 같이 변수 큰 따옴표를 이스케이프 할 수 있습니다.
sed -i "s/foo/bar ""$VARIABLE""/g" <file>
즉, $ VARIABLE 관련 "
을 ""
.
(전자 -escaping "$VAR"
같이 \"$VAR\"
A의 결과 "
-quoted 출력 문자열).
예
$ VAR='apples and bananas'
$ echo $VAR
apples and bananas
$ echo "$VAR"
apples and bananas
$ printf 'I like %s!\n' $VAR
I like apples!
I like and!
I like bananas!
$ printf 'I like %s!\n' "$VAR"
I like apples and bananas!
여기에서 $ VAR는 "
sed로 파이핑하기 전에 '
- "
따옴표로 묶습니다 (sed는 -또는- 따옴표로 표시됨).
$ printf 'I like %s!\n' "$VAR" | sed 's/$VAR/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/"$VAR"/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/$VAR/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/""$VAR""/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed "s/$VAR/cherries/g"
I like cherries!
$ printf 'I like %s!\n' "$VAR" | sed "s/""$VAR""/cherries/g"
I like cherries!
다음과 비교하십시오.
$ printf 'I like %s!\n' $VAR | sed "s/$VAR/cherries/g"
I like apples!
I like and!
I like bananas!
$ printf 'I like %s!\n' $VAR | sed "s/""$VAR""/cherries/g"
I like apples!
I like and!
I like bananas!
... 등등 ...
결론
My recommendation, as standard practice, is to
"
-quote BASH variables ("$VAR"
)"
-quote, again, those variables (""$VAR""
) if they are used in a sed expression (which itself must be"
-quoted, not'
-quoted)
$ VAR='apples and bananas'
$ echo "$VAR"
apples and bananas
$ printf 'I like %s!\n' "$VAR" | sed "s/""$VAR""/cherries/g"
I like cherries!
You need to use \" for escaping " character (\ escape the following character
sed -i 's/\"http://www.fubar.com\"/URL_FUBAR/g'
May be the "\" char, try this one:
sed 's/\"http:\/\/www.fubar.com\"/URL_FUBAR/g'
참고URL : https://stackoverflow.com/questions/7517632/how-do-i-escape-double-and-single-quotes-in-sed
'IT박스' 카테고리의 다른 글
ASP.NET 페이지가없는 ResolveUrl (0) | 2020.11.24 |
---|---|
한 줄의 텍스트를 한 줄로 유지-전체 줄을 줄 바꿈하거나 전혀 줄 바꿈 없음 (0) | 2020.11.24 |
종료와 종료의 차이점 Now of Executor Service (0) | 2020.11.24 |
상속이있는 @Data 주석 lombok에서 equals / hashCode 경고 (0) | 2020.11.24 |
Android Studio build.gradle 경고 메시지 (0) | 2020.11.24 |