замена sed на Mac OS X Leopard не делает то, что ожидало

Я пытаюсь заменить \" (обратная косая черта двойная кавычка) '(кавычкой) с помощью sed.

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

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

Это делает то же самое как sed "s/\"/\'/g" file.txt

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

У кого-либо есть подсказка?

5
задан Peter Hosey 26 August 2010 в 10:32
поделиться

3 ответа

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

sed "s/\\\\\"/\'/g"
8
ответ дан 13 December 2019 в 22:07
поделиться

Проблемы с цитированием в 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."

Обратите внимание, что для создания сценария sed три строки соединяются вместе:

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

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

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

  • s / \\ "/
  • '/ g

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

2
ответ дан 13 December 2019 в 22:07
поделиться

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

awk '{gsub("\042","\047") }{print}' file
0
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: