[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하면 여러 개의 텍스트 처리가 가능합니다).


답변

tr 을 사용 하여 삭제하십시오 ".

 echo "$opt" | tr -d '"'

참고 : 이것은 앞뒤뿐만 아니라 모든 큰 따옴표를 제거합니다.


답변

이렇게하면 큰 따옴표가 모두 제거됩니다.

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