Обрезать текст с помощью sed - PullRequest
4 голосов
/ 18 марта 2011

Как мне удалить первую и последнюю цитаты?

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

Выше работает как ожидалось, но я думаю, что должен быть лучший способ.

Ответы [ 3 ]

3 голосов
/ 18 марта 2011

Вы можете объединить вызовы sed в один:

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

Отправленная вами команда удалит первую кавычку, даже если она не в начале строки.Если вы хотите убедиться, что это сделано только в начале, вы можете закрепить его так:

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

Некоторые версии sed не любят множественные команды, разделенные точкой с запятой.Для них вы можете сделать это (это также работает в тех, которые принимают точки с запятой):

echo "\"test\"" | sed -e 's/^"//' -e 's/"$//'
2 голосов
/ 18 марта 2011

Может быть, вы предпочитаете что-то вроде этого:

echo '"test"' | sed 's/^"\(.*\)"$/\1/'
0 голосов
/ 18 марта 2011

, если вы уверены, что нет других кавычек, кроме первой и последней, просто используйте /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

Обратите внимание на 2-й пример первой и последней кавычек, которые могут не совпадать точно с первой и последней позициями.

пример с большим количеством кавычек

$ 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
...