2010-02-13 3 views
4

Я пытаюсь заменить \»(обратная косая doouble цитата) по '(цитата) с использованием СЭД.заменить СЭД на Mac OS X Leopard не делать то, что ожидалось

sed "s/\\\"/\'/g" file.txt 

Команда не работать, как ожидалось. Он заменяет все «в текстовом файле, а не только \».

Он делает то же самое, что СЭД «с/\»/\ '/ г»file.txt

I Я работаю над Mac OS X Leopard.

Есть ли у кого-нибудь ключ?

+2

Если вы сомневаетесь, добавьте еще один обратный слэш. –

ответ

7

Вы имеете дело с печально известной проблемой цитирования оболочки. Попробуйте использовать одиночные кавычки вокруг s // g вместо этого или добавьте дополнительный выход:

sed "s/\\\\\"/\'/g" 
+0

Дополнительный побег сработал! Спасибо, Пол. – jlfenaux

+0

Я не думаю, что это именно проблема цитирования оболочки, так как проблема заключается в интерпретации sed строки, а не оболочки. Sed видит s/\ "/ \ '/ g и интерпретирует« то же самое, что ». –

+1

@William - я характеризую его как« проблему цитирования оболочки », потому что bash« проглатывает »один из экранов, так что sed не видит –

2

Цитата: Вопросы, связанные с bash - это весело.

$ cat input 
"This is an \"input file\" that has quoting issues." 
$ sed -e 's/\\"/'"'"'/g' input 
"This is an 'input file' that has quoting issues."

Обрати внимание, что есть три строки стыковой вместе, чтобы сделать СЕПГ скрипта:

  • s/\\"/
  • '
  • /g

Первым и последним цитируются с одним цитаты, а середина цитируется двойными кавычками.

Мэтью команда работает путем объединения двух строк вместо трех:

  • s/\\"/
  • '/g

где первый является одинарных кавычках, а второй в двойных кавычках.

+1

Nice. Вы можете немного упростить его до ввода sed -e '/ \\ "/'" '/ g " –

0

не нужно использовать слишком много котировок. \ 042 восьмеричный для " и \ 047 восьмеричный для одной цитаты

awk '{gsub("\042","\047") }{print}' file