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

Я понимаю, что nmap является стандартом hackish голливудское приложение и здесь является страницей от парня, который работал для создания голливудского взламывания на Троне более реальным.

10
20.03.2011, 21:05
2 ответа

Две подсказки:

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

    • 'foo'    заключенный в кавычки foo
    • \'       завершенный '
    • 'bar'    заключенный в кавычки bar

    получение foo'bar.

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

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

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

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

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

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

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

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

11
27.01.2020, 20:02
  • 1
    Помещать тонкость на Вашу вторую подсказку: можно использовать любой символ вместо / при использовании s и команд y, возможно среди других. При использовании regexps с другими командами sed, нужно оставить первого разделителя (при использовании альтернативы/). Вашего предпочтительного разделителя нужно также оставить, при попытке соответствовать ему в regexp. –  Eli Heady 21.03.2011, 00:41
  • 2
    Трудно смешать одинарные кавычки и двойные кавычки, не становясь грязным. Некоторые люди находят легче читать, если Вы заключаете одинарные кавычки в кавычки, путем помещения их в двойные кавычки, вместо того, чтобы выйти из них. Так, а не 'foo'\''bar', мы могли бы использовать 'foo'"'"'bar'. –  Scott 29.07.2014, 00:30

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

c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g"
1
27.01.2020, 20:02

Теги

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