如何删除第一个和最后一个引号?
echo "\"test\"" | sed 's/"//' | sed 's/"$//'
以上工作正如预期的那样,但我想必须有更好的方法。
答案 0 :(得分:3)
您可以将sed
个调用合并为一个:
echo "\"test\"" | sed 's/"//;s/"$//'
您发布的命令将删除第一个引用,即使它不在行的开头。如果你想确保它只在它开始时才能完成,那么你可以像这样锚定它:
echo "\"test\"" | sed 's/^"//;s/"$//'
某些版本的sed
不喜欢用分号分隔的多个命令。对于他们你可以这样做(它也适用于接受分号的那些):
echo "\"test\"" | sed -e 's/^"//' -e 's/"$//'
答案 1 :(得分:2)
也许您更喜欢这样的事情:
echo '"test"' | sed 's/^"\(.*\)"$/\1/'
答案 2 :(得分:0)
如果您确定除了第一个和最后一个之外没有其他引号,只需使用/g
修饰符
$ echo "\"test\"" | sed 's/"//g'
test
如果你有Ruby(1.9 +)
$ echo $s
blah"te"st"test
$ echo $s | ruby -e 's=gets.split("\"");print "#{s[0]}#{s[1..-2].join("\"")+s[-1]}"'
blahte"sttest
请注意第二个示例,第一个和最后一个引号可能不完全位于第一个和最后一个位置。
带有更多引号的示例
$ s='bl"ah"te"st"tes"t'
$ echo $s | ruby -e 's=gets.split("\"");print "#{s[0]}#{s[1..-2].join("\"")+s[-1]}"'
blah"te"st"test