使用sed修剪文本

使用sed修剪文本,sed,awk,grep,Sed,Awk,Grep,如何删除第一个和最后一个引号 echo "\"test\"" | sed 's/"//' | sed 's/"$//' 上述方法如预期效果,但我想一定有更好的方法。也许您更喜欢这样的方法: echo '"test"' | sed 's/^"\(.*\)"$/\1/' echo "\"test\"" | sed 's/^"//;s/"$//' 您可以将sed调用组合成一个: echo "\"test\"" | sed 's/"//;s/"$//' 您发布的命令将删除第一个引号,即使它不在行

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

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

上述方法如预期效果,但我想一定有更好的方法。

也许您更喜欢这样的方法:

echo '"test"' | sed 's/^"\(.*\)"$/\1/'
echo "\"test\"" | sed 's/^"//;s/"$//'

您可以将
sed
调用组合成一个:

echo "\"test\"" | sed 's/"//;s/"$//'
您发布的命令将删除第一个引号,即使它不在行首。如果要确保仅在开始时完成,则可以如下方式锚定:

echo '"test"' | sed 's/^"\(.*\)"$/\1/'
echo "\"test\"" | sed 's/^"//;s/"$//'
某些版本的
sed
不喜欢用分号分隔的多个命令。对于他们,您可以这样做(它也适用于接受分号的人):


如果您确定除了第一个和最后一个引号之外没有其他引号,只需使用
/g
修饰符即可

$ echo "\"test\"" | sed 's/"//g'
test
如果你有Ruby(1.9+)

请注意第二个示例中的第一个和最后一个引号可能不完全位于第一个和最后一个位置

带有更多引号的示例

$ 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

tr-d\”比sed的//“//g'@kurumi速度更受欢迎。使用tr的速度大约是前者的两倍。当然,在许多情况下这是不相关的,但tr是一个很好的工具。(类似于sed中的“y”命令。)@william,当然可以
tr
是了解的好工具。但是
sed
tr
有更多的用途@kurumi是的,sed确实有更多的用途。但是,当您的目标是从数据流中删除单个字符的所有实例时,tr是正确的工具。@William,我不想就此与您争论。这是OP的偏好,所以我的答案符合这一点。就我自己而言,我甚至不想使用大量可用的shell工具。Ruby是我的第一选择。