bash заменить рекурсивно по регулярному выражению
Пытаюсь заменить все совпадения строк на пустоту
все строки начинаются на $a= а заканчиваются на }?> между ними может быть любое количество любых символов (как я понимаю это *)
набросал вот такую команду, но видимо я не правильно составил регулярное выражение.
find ./ -type f -print0 | xargs -0 sed -i 's/$a=*}?>/ /g'
Ответы (1 шт):
Автор решения: DiD
→ Ссылка
Вы, наверное, вот это имели в виду:
find ./ -type f | xargs sed -i -e "s/\\\$a=.*\\}\\?>//g"
Здесь:
\\\означает первый\\экранирует символ в строке\$;.означает любой символ;*означает количество повторений от 0 до бесконечности;\\экранирует символы в строке}и?.
Пример:
% cat test.txt
---- начало файла -------
$a= kjhkjgjhjhg }?>
$a= hgjg jgjh gjg jhg }?>
$a= g gh hgj hg jhg hg }?>
---- конец файла --------
% find ./ -type f | xargs sed -i -e "s/\\\$a=.*\\}\\?>//g"
% cat test.txt
---- начало файла -------
---- конец файла --------