заменить на sed в Mac OS X Leopard не делает то, что ожидал - PullRequest
5 голосов
/ 13 февраля 2010

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

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

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

Он делает то же самое, что и sed "s / \" / \ '/ g "file.txt

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

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

Ответы [ 3 ]

8 голосов
/ 13 февраля 2010

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

sed "s/\\\\\"/\'/g"
2 голосов
/ 13 февраля 2010

Цитировать проблемы с 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

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

0 голосов
/ 13 февраля 2010

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

awk '{gsub("\042","\047") }{print}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...