使用sed修剪文本

时间:2011-03-18 08:53:01

标签: sed awk grep

如何删除第一个和最后一个引号?

echo "\"test\"" | sed 's/"//' | sed 's/"$//'

以上工作正如预期的那样,但我想必须有更好的方法。

3 个答案:

答案 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