У меня есть файл, который содержит несколько строк XML. Я хотел бы заменить определенные части файла. Некоторые части файла содержат кавычки ( "
), которые я хотел бы заменить. Я пытался избежать кавычки \
, но я не думаю, что это работает на основе результатов моего файла.
Вот пример одной из моих команд sed:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
Это то, как вы избегаете кавычек в команде sed или я делаю что-то не так?
"text"
на'text'
. Конечно, это ничего не даст"othertext"
. Покажите несколько строк ввода, соответствующий нежелательный вывод, и объясните, какой вывод вы хотите вместо этого.\"
правильный ли способ избежать кавычек в команде sed?"
. Но ваша команда оболочки использует строку в двойных кавычках, и\"
там все правильно.sed
Программа видит вs/"text"/'text'/ig
качестве аргумента-e
.s/\"text\" /'text'/ig
бы, он нашел бы только"text"
с пробелом после этого?sed
это правильный инструмент для работы, может быть, вам нужен анализатор XML.Ответы:
Два совета:
Вы не можете избежать одиночной кавычки в строке, заключенной в одинарные кавычки. Таким образом, вы должны закрыть цитату, добавить экранированную цитату, а затем снова открыть цитаты. То есть
'foo'\''bar'
, который разбивается как:'foo'
цитируемыйfoo
\'
спасся'
'bar'
цитируемыйbar
уступая
foo'bar
./
в sed. Я считаю, что использование/
и\
в том же выражении sed затрудняет чтение.Например, чтобы удалить цитаты из этого файла:
Учитывая мои два совета выше, команда, которую вы можете использовать для удаления как двойных, так и одинарных кавычек:
Основываясь на моем первом совете, оболочка уменьшает второй аргумент sed (то есть строку после
-e
)s|["']||g
и передает эту строку в sed. Исходя из моего второго совета, sed относится к этому так же, какs/['"]//g
. Это значитВозможно, вам нужно что-то более сложное, чем это, чтобы делать то, что вы хотите, но это только начало.
источник
'foo'\''bar'
, мы могли бы использовать'foo'"'"'bar'
.У меня есть порт Windows с утилитами Unix, поэтому команды выглядят немного иначе, но у меня был CSV-файл с запятыми и кавычками. Используя эту ветку в качестве руководства, я смог удалить цитаты с помощью этой команды:
источник