Как заменить кавычки в файле с помощью sed?

У меня есть файл, содержащий несколько строк xml. Я хотел бы заменить некоторые части файла. Некоторые части файла содержат кавычки ( " ), которые я хотел бы заменить. Я пытался избежать кавычки с \ , но я не думаю, что это работает на основе результата моего файла.

Вот пример одной из моих команд sed:

 sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp 

Это как вы избегаете кавычек в команде sed, или я делаю что-то неправильно?

2 Solutions collect form web for “Как заменить кавычки в файле с помощью sed?”

Два совета:

  1. Вы не можете избежать одиночной кавычки внутри строки, указанной в одинарных кавычках. Поэтому вам нужно закрыть цитату, добавить скрытую цитату, а затем снова открыть цитаты. То есть: 'foo'\''bar' , который разбивается как:

    • 'foo' цитирует foo
    • \' сбежал '
    • 'bar' bar

    уступая foo'bar .

  2. (необязательно) Вам необязательно использовать / in sed. Я считаю, что использование / и \ в одном и том же выражении sed затрудняет чтение.

Например, чтобы удалить кавычки из этого файла:

 $ cat /tmp/f aaa"bbb"'ccc'aaa 

Учитывая мои два совета выше, команда, которую вы можете использовать для удаления двух и одинарных кавычек:

 $ sed -e 's|["'\'']||g' /tmp/f 

Основываясь на моем первом совете, оболочка уменьшает второй аргумент sed (т. Е. Строку после -e ) до s|["']||g и передает эту строку в sed. Основываясь на моем втором совете, sed рассматривает это одно и то же как s/['"]//g . Это значит

удалите все символы, соответствующие ' или " (т.е. замените их ничем)

Вам, вероятно, нужно что-то более сложное, чем это делать, что вы хотите, но это начало. Я надеюсь, что это помогает.

У меня есть Windows-утилита unix, так что команды выглядят немного иначе, но у меня был файл csv с запятыми и кавычками. Используя эту нить в качестве руководства, я смог удалить цитаты с помощью этой команды:

 c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g" 
  • Удалить неизвестное количество строк от * до пустой строки
  • Как удалить определенную строку и следующую пустую строку с помощью GNU sed?
  • Как заменить все, кроме определенного шаблона с sed?
  • Вопрос о нескольких командах sed
  • Вопрос: что означает «s / quiet init =. * $ //»?
  • Заменить "\/"
  • sed replace - нужна помощь в замене текста в кучке файлов
  • Печать нескольких строк из текстового файла
  • Замена шаблона переменной
  • Confused by sed output при использовании N. Кто-нибудь может объяснить эти результаты?
  • Подставка Sed с 3 линиями раздвижных окон
  • Linux и Unix - лучшая ОС в мире.