3


Я использую CMD на Windows Xp, чтобы заменить специальный текст на Sed. Я использую эту команду для замены специальных символов, таких как $ or * :

sed -i "s/\*/123/g;" 1.txt

Но как команду я должен использовать, чтобы заменить эту строку ciao! в моих текстовых файлах? Возможно?

\\
\\\
""
sed.exe -i "s/{\*)(//123/
sed -i "s/\\/123/g;" 1.txt

предыдущая команда не работает, потому что у меня есть \ , " и другие специальные строки, которые sed использует для создания регулярных выражений.

2 ответа2

5

Поиск буквенных строк с регулярным выражением, когда строка поиска содержит специальные символы, иногда не так прост, как поиск шаблонов, но вы можете сделать это с небольшим количеством жонглирования.

Примечание: команда echo должна обслуживать специальные символы CMD, поэтому ей нужно ^^ для экранирования одиночных ^ и ^| убежать | ... Вам не нужен escape-символ CMD ^ если вы печатаете прямо в файл.


Шаг 1: Создайте файл с именем literal-srch-strings.txt, который содержит точную (неизмененную) строку для замены. Есть 2 способа создать этот файл:

  1. Как команда, введенная в командной строке CMD, или как команда из командного сценария.cmd/.bat.

    echo sed -i^^/\\*$/$[{" ;"> literal-srch-strings.txt

  2. Сделайте literal-srch-strings.txt самостоятельно, в своем текстовом редакторе.
    В этом случае вам не следует использовать CMD-escape-символ ^ , поэтому строка имеет только один ^ , а не ^^ - это потому, что вы обходите оболочку CMD.
    Вот что нужно в файле .txt (так же, как указано в имени файла :)

    sed -i^/\\*$/$[{" ;"


Шаг 2: Создайте скрипт sed с именем str-to-regex.sed для преобразования строки (строк) в sed regex (s).
Обратите внимание, что та же проблема CMD-escape-символа ^ применима к этому шагу, поэтому, опять же, есть два способа создать файл .sed:

  1. Как команда:

    echo s/[]\/$*.^^^|[]/\\^&/g; s/.*/s\/^&\/Ciao!\/g/> str-to-regex.sed

  2. Используя ваш текстовый редактор, создайте файл с именем str-to-regex.sed, содержащий:

    s/[]\/$*.^|[]/\\&/g; s/.*/s\/&\/Ciao!\/g/


Шаг 3: Запустите sed-скрипт, который преобразует строку в регулярное выражение sed, и
отправьте свой вывод другому sed-скрипту replace-text.sed, который будет выполнять фактическую замену.

sed -f str-to-regex.sed  literal-srch-strings.txt > replace-text.sed

Шаг 4: Запустите replace-text.sed - для теста мы можем использовать literal-srch-strings.txt в качестве входного файла, но вы, конечно, можете использовать любой входной файл.

sed -f replace-text.sed  literal-srch-strings.txt

Вот вывод:

Ciao! 
0

Чтобы переопределить значение специальных символов в командной строке (или строк в пакетном файле), экранируйте их с помощью символа ^ (карат). Чтобы ввести буквальный символ в каратах, используйте два из них подряд.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .