sed :Замена текстового шаблона, содержащего обратную косую черту

Если вы хотите удалить образ по какой-либо причине, (неудачная установка, не загружается,... )просто используйте обычную команду удаления, выдающую полную версию . Этот инструмент понимает, как удалить ядро ​​(и любые вспомогательные файлы, исправляет конфигурацию в соответствии с ), он используется за кулисами при установке нового ядра. Должна быть ручка frob для количества поддерживаемых ядер, Fedora поддерживает три --, что отлично работает.

2
09.11.2020, 08:55
2 ответа

\ особенный:

  • в качестве оператора кавычек в оболочке, в том числе внутри двойных кавычек, где его можно использовать для экранирования самого себя, ", $, `и продолжения строки.
  • как оператор регулярного выражения (как для экранирования, так и для введения новых операторов )слева -рука (шаблон )сторона sкоманды в sed.
  • в замещающей части команды ssed, где она может экранировать &, саму себя и новую строку (или вводить управляющие последовательности в стиле C -, такие как \nв некоторых реализациях sed).

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

Так вот, вы бы хотели:

  • используйте одинарные кавычки вместо двойных кавычек вокруг \символов
  • выход из \как для левой, так и для правой части команды s
  • используйте двойные кавычки в части, где переменные должны быть раскрыты.
from_regexp='C:\\A\\quick\\brown\\fox\\'
escaped_replacement='C:\\Animal\\'
sed "s/$from_regexp/$escaped_replacement/g" < your-file

Или вы можете использовать perlвместо sed, где вы можете делать замены фиксированных строк, не беспокоясь о специальных символах, если вы делаете это как:

from='C:\A\quick\brown\fox\'
to='C:\Animal\'

FROM=$from TO=$to perl -pe 's/\Q$ENV{FROM}\E/$ENV{TO}/g' < your-file

См. также Как гарантировать, что строка, интерполированная в подстановку `sed `, экранирует все метасимволы для работы с произвольными строками.

5
18.03.2021, 22:51

Это было запущено на машине с Linux, не уверен, что поведение cygwin такое же, как с bash в Linux.

PC1:~> echo 'C:\A\quick\brown\fox\ jumps over the lazy dog' | sed -ne 's|\(C:\\A\).\+\\\+\(.\+\)|\1nimal\2|p'
C:\Animal jumps over the lazy dog

PC1:~> echo 'C:\A\quick\brown\fox\ ran with the hounds' | sed -ne 's|\(C:\\A\).\+\\\+\(.\+\)|\1nimal\2|p'
C:\Animal ran with the hounds
PC1:~>

Так что я использовал групповой захват, повторно использовал «А», а затем добавил «животное» после него. А чтобы было немного понятнее, я использовал '|' в качестве заменяющего разделителя, чтобы избежать слишком большого количества косых черт.

Надеюсь, это поможет.

enter image description here

0
18.03.2021, 22:51

Теги

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