[string] 쉘 스크립트-변수에서 첫 번째와 마지막 따옴표 ( “) 제거
다음은 더 큰 스크립트의 쉘 스크립트 스 니펫입니다. 변수가 보유한 문자열에서 따옴표를 제거합니다. sed를 사용하여하고 있지만 효율적입니까? 그렇지 않다면 효율적인 방법은 무엇입니까?
#!/bin/sh
opt="\"html\\test\\\""
temp=`echo $opt | sed 's/.\(.*\)/\1/' | sed 's/\(.*\)./\1/'`
echo $temp
답변
기본 셸 접두사 / 접미사 제거 기능을 사용하면 더 간단하고 효율적인 방법이 있습니다.
temp="${opt%\"}"
temp="${temp#\"}"
echo "$temp"
${opt%\"}
접미사를 제거합니다 "
(쉘 해석을 방지하기 위해 백 슬래시로 이스케이프 처리).
${temp#\"}
접두사를 제거합니다 "
(쉘 해석을 방지하기 위해 백 슬래시로 이스케이프 처리).
또 다른 장점은 주변 인용 부호가있는 경우에만 주변 인용 부호를 제거한다는 것입니다.
BTW, 솔루션은 항상 첫 번째 문자와 마지막 문자를 제거합니다 (물론 데이터를 알고 있다고 확신하지만 제거하는 것을 항상 확인하는 것이 좋습니다).
sed 사용하기 :
echo "$opt" | sed -e 's/^"//' -e 's/"$//'
(jfgagne에서 표시 한대로 에코를 제거하는 개선 된 버전)
sed -e 's/^"//' -e 's/"$//' <<<"$opt"
따라서 선행 "
은 아무것도 아닌 것으로 바꾸고 후미도 아무것도 아닌 것으로 바꿉니다 "
. 동일한 호출에서 (다른 sed를 파이프하고 시작할 필요가 없습니다. 사용 -e
하면 여러 개의 텍스트 처리가 가능합니다).
답변
답변
이렇게하면 큰 따옴표가 모두 제거됩니다.
echo "${opt//\"}"
답변
xargs를 사용하는 간단한 방법이 있습니다 .
> echo '"quoted"' | xargs
quoted
명령이 제공되지 않으면 xargs 는 echo를 기본 명령으로 사용하고 입력에서 따옴표를 제거합니다. 예를 들어 여기를 참조 하십시오 .
답변
한 번만 호출하면됩니다 sed
.
$ echo "\"html\\test\\\"" | sed 's/^"\(.*\)"$/\1/'
html\test\
답변
가장 짧은 방법 -시도 :
echo $opt | sed "s/\"//g"
실제로 모든 "
s (큰 따옴표)를 제거합니다 ( opt
처음과 끝이 아닌 다른 큰 따옴표가 실제로 있습니까? 그래서 실제로는 똑같은 것입니다. 😉
답변
jq를 사용하고 결과에서 따옴표를 제거하려고하면 다른 답변이 효과가 있지만 더 좋은 방법이 있습니다. -r
옵션 을 사용하면 따옴표없이 결과를 출력 할 수 있습니다.
$ echo '{"foo": "bar"}' | jq '.foo'
"bar"
$ echo '{"foo": "bar"}' | jq -r '.foo'
bar