sed without regex
I am using GNU SED for find and replace functionality on large files(upto 2GB).
Find and replace characters can contain any characters, hence I want find and replace parameters to be treated as plain text as it comes.
Я не хочу рассматривать или находить или заменять параметры как регулярное выражение с помощью команды sed.
Я много экспериментировал, но каждый раз я получаю новые комбинации регулярных выражений, которые не работают для sed в виде простого текста.
Как этого достичь?
Есть ли какая-нибудь формула, чтобы избежать специальных символов?
Примечание: я использую ~
оператор как разделитель команд вместо /
Ниже приведен пример
sed -ne "s~^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$~Replace" -ne "w output.txt" "input.txt"
Вышеуказанная команда не работает, так как она обрабатывает параметр поиска как регулярное выражение (как и регулярное выражение). Следовательно, чтобы найти текст, мне нужно экранировать некоторые специальные символы в регулярном выражении, как показано ниже
sed -ne "s~\^\[-+\]?\[0-9\]\*\\.?\[0-9\]+(\[eE\]\[-+\]?\[0-9\]+)?\$~Replace" -ne "w output.txt" "input.txt"
В другом примере я должен изменить .*$
в .\*\$
Но в (.*$)
Я не хочу вносить вклад.
Так есть ли универсальное правило для escape-последовательности?
1 ответ
Q: Есть ли какая-нибудь формула для экранирования специальных символов?
Q: Есть ли универсальное правило для escape-последовательности?
A: Вы можете использовать соответствующий шестнадцатеричный код для специальных символов, в случаях, когда просто набираете /
,.
,*
,?
,$
и т. д. становится раздражающим. Например:
sed -rn '/\x22/p' file
будет печатать строки, которые содержат двойные кавычки, так как \x22
представляет собой "
,
Если вам нужно посмотреть шестнадцатеричные коды, вы можете удобно сохранить их все в файл с помощью этой команды:
gawk 'BEGIN{for(i=0;i<255;i++){printf("%d\t%x\t%c\n", i,i,i)}}' null >chars.txt