
В настоящее время у меня есть команда sed, которая соответствует определенной фразе в файле и заменяет все строки этого файла полным текстом другого файла. Это работает для фразы "### ЗАМЕНИТЬ ВСЕ ПОСЛЕ ЭТОЙ СТРОКИ ###"
sed -n -e '1,/^### REPLACE EVERYTHING AFTER THIS LINE ###$/{ p; d; }' \
-e 'r replacement_file.txt' \
-e 'q' original_file.txt > original_file.txt.new &&
mv original_file.txt.new original_file.txt
Эта команда работает для текстовых файлов, но при необходимости заменить файлы с комментариями в стиле javascript я столкнулся с небольшой проблемой. Новая строка/фраза, которую я пытаюсь сопоставить, теперь выглядит следующим образом (и обратите внимание, что я хочу сопоставитьэтотконкретный комментарий, а не все комментарии, начинающиеся с двойной косой черты):
//REPLACE AFTER THIS
Я столкнулся с проблемой, поскольку в настоящее время мне не удается экранировать двойной прямой слеш. Я пробовал экранировать два символа с помощью обратного слеша, но это не сработало. Моя текущая (нерабочая) команда выглядит следующим образом:
sed -n -e ‘1,/^\/\/REPLACE AFTER THIS$/{ p; d; }’\
-e 'r replacement_file.txt' \
-e 'q' original_file.txt > original_file.txt.new && mv original_file.txt.new original_file.txt
Заранее спасибо.
решение1
Спасибо всем, кто прокомментировал, в дополнение к исправлению не-ASCII цитаты, вот рабочая команда:
sed -n -e '1,\|^//REPLACE TEST$|{ p; d; }' \
-e 'r replacement_file.txt' \
-e 'q' original_file.txt > original_file.txt.new && mv original_file.txt.new original_file.txt