Найдите текст регулярного выражения и замените его текстом, содержащим скобки и кавычки, используя sed - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь использовать строку кода, которая найдет и заменит текст длинной строкой префикса и кода суффикса.

Исходный файл:

1. 'text that will go here'
2. 'more text that will be here'
3. 'even more text'

После замены:

youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args "-ss 0:0:55 -to 0:1:05" "ytsearch1:text that will go here" -o "text that will go here";
youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args "-ss 0:0:55 -to 0:1:05" "ytsearch1:more text that will be here" -o "more text that will be here";
youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args "-ss 0:0:55 -to 0:1:05" "ytsearch1:even more text" -o "even more text";

У меня есть следующее регулярное выражение, которое соответствует #. 'и заменяет его, но когда я пытаюсь заменить его кодом, sed не принимает его и выдает ошибку. Это то, что я пытался использовать:

sed -e "s/^.*\d. '/youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args "-ss 0:0:55 -to 0:1:05" "ytsearch1:/g" original.txt > new.txt

Я знаю, почему это не работает, потому что замена на содержит множество косых черт и кавычек, но я не знаю, как получить sed принять эти символы для замены, чтобы не нарушать всю команду.

1 Ответ

2 голосов
/ 26 апреля 2020

С расширенным регулярным выражением:

sed -E "s|^.*'(.*)'.*|youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args \"-ss 0:0:55 -to 0:1:05\" \"ytsearch1:\1\" -o \"\1\";|" file

или с регулярным выражением:

sed "s|^.*'\(.*\)'.*|youtube-dl -f 'bestvideo[height<=360]+bestaudio/best[height<=360]' --postprocessor-args \"-ss 0:0:55 -to 0:1:05\" \"ytsearch1:\1\" -o \"\1\";|" file

См .: Выход из косой черты в команде sed

...