Из того, что я могу найти, когда вы используете одинарные кавычки, все внутри считается буквальным. Я хочу это для моей замены. Но я также хочу найти строку с одинарными или двойными кавычками.
Например,
sed -i 's/"https://www.fubar.com"/URL_FUBAR/g'
Я хочу заменить «https://www.fubar.com» на URL_FUBAR. Как sed должен распознавать мои // или мои двойные кавычки?
Спасибо за любую помощь!
EDIT: Могу ли я использовать s/\"http\:\/\/www\.fubar\.\com\"/URL_FUBAR/g?
Действительно ли \ экранирует символы внутри одинарных кавычек?
Команда
s///вsedпозволяет использовать другие символы вместо/в качестве разделителя, как вor
Двойные кавычки не проблема. Для сопоставления одинарных кавычек поменяйте местами два типа кавычек. Обратите внимание, что строка в одинарных кавычках не может содержать одинарные кавычки (даже экранированные).
Точки должны быть экранированы, если
sedдолжен интерпретировать их как буквальные точки, а не как шаблон регулярного выражения., который соответствует любому одному символу.отличный ответ dood, у меня просто есть быстрый вопрос. Как бы я сделал одинарные кавычки вместо своих двойных. В моем коде есть экземпляры, где он либо одинарный, либо двойной. Я могу просто запустить эту команду дважды, но каков синтаксис для экранирования одинарной кавычки? — person KRB; 22.09.2011
Экранирование одинарных кавычек у меня не сработало (bash на Mac), но сработало использование других типов кавычек для упаковки команды, чем заменяемая кавычка. например:
sed 's/"/bla/g'для замены"наblaилиsed "s/'/bla/g" to replace‘` наbla— person KRB; 01.05.2018@rrr Строка в одинарных кавычках не может содержать встроенную одинарную кавычку. Изменение внешних кавычек (и экранирование любых специальных символов, интерпретация которых теперь может быть интересна оболочке) — один из способов решить эту проблему. Другой способ — вырваться из строки в одинарных кавычках и соединить строку с
"'"(одинарная кавычка в двойных кавычках), прежде чем продолжить с остальной частью строки в одинарных кавычках, как в'you'"'"'d better do that'. — person KRB; 21.03.2019Трудно избежать одинарной кавычки в одинарных кавычках. Попробуй это:
Пример:
производит
Вам нужно использовать \» для экранирования » символа (\ экранировать следующий символ
Может быть символ «\», попробуйте этот:
предложение дикой догадки не является решением. вместо этого вы можете добавить такие догадки в комментарии — или даже лучше — сначала попробуйте — person KRB; 14.01.2017
Моя проблема заключалась в том, что мне нужно было иметь
""вне выражения, так как у меня есть динамическая переменная внутри самого выражения sed. Итак, фактическое решение заключается в том, что от Ленна Джекмана вы заменяете"внутри регулярного выражения sed на[\"].Итак, мой полный удар:
Вот:
#— разделитель sed[\"]="в регулярном выраженииvalue =
\"tags/$RELEASE_VERSION\"= моя строка замены, важно, что она имеет только\"для кавычекЧто касается одинарной кавычки, см. приведенный ниже код, используемый для замены строки
let'sнаlet us:команда:
результат:
Есть намного способ сделать это проще. Попробуйте:
echo "hello, let's go" | sed s/let\'s/let us/g. На самом деле вам не обязательно указывать параметр дляsedв одинарных кавычках. — person KRB; 27.05.2021Экранирование двойной кавычки может быть абсолютно необходимо в sed: например, если вы используете двойные кавычки во всем выражении sed (что вам нужно сделать, когда вы хотите использовать переменную оболочки).
Вот пример, который затрагивает экранирование в sed, но также фиксирует некоторые другие проблемы с цитированием в bash:
Предположим, вы хотите изменить комнату с помощью сценария sed, который вы можете использовать снова и снова, поэтому вы изменяете ввод следующим образом:
Этот сценарий добавит всю строку, если ее там нет, или просто заменит (используя sed) строку, которая там есть, текстом плюс значение $i.
P.S. Я написал приведенный выше сценарий в несколько строк, чтобы сделать комментарии разборчивыми, но я использую его как однострочный в командной строке, который выглядит следующим образом:
Кроме того: выражения sed, содержащие переменные BASH, должны быть заключены в двойные (
") кавычки, чтобы переменная интерпретировалась правильно.Если вы также заключаете свою переменную $BASH в двойные кавычки (рекомендуемая практика)
… тогда вы можете избежать двойных кавычек переменной, как показано:
То есть замените
", связанный с $VARIABLE, на"".(Простое экранирование
"$VAR"вместо\"$VAR\"приводит к выходной строке с"в кавычках.)Примеры
Здесь $VAR заключен в
"перед передачей в sed (sed заключен либо в', либо в"):Сравните это с:
… и так далее …
Заключение
Моя рекомендация, как стандартная практика, состоит в том, чтобы
"-переменные BASH в кавычках ("$VAR")"-кавычки, снова, эти переменные (""$VAR""), если они используются в выражении sed (которое само должно быть заключено в", а не'в кавычки)Ты можешь использовать %