Вот как вы показываете последнюю строку:
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'
Было бы полезно, если бы вы показали некоторые входные данные.
Опция -r
делает grep
рекурсивным.Это означает, что он будет работать с файлами в каталоге и его подкаталогов.Это то, что вы намереваетесь?
Точки в grep
и sed
обозначают любого персонажа.Если вы хотите буквальные точки, вам нужно избежать их.
Последний экранированный знак доллара в командах grep
и sed
будет восприниматься как буквальный знак доллара.Если вы хотите привязать конец строки, вы должны удалить escape.
.*
работает только как буквенная строка в правой части команды sed
s
.Если вы хотите включить то, что совпало с левой стороной, вам нужно использовать группы захвата.Модификатор g
в команде s
необходим только в том случае, если шаблон появляется более одного раза в строке.
Использование кавычек, кавычек, кавычек, кавычек трудно читать.Используйте двойные кавычки, чтобы разрешить расширение переменной.
Попробуйте самостоятельно выполнить команду grep
без xargs
и sed
, чтобы увидеть, создает ли она список файлов.
Это может бытьближе к тому, что вы хотите:
grep -lr -e "\$rev -.$repUpRev.$" *.html | xargs sed -i "s/\$rev -.$repUpRev.$/\$rev -REPLACEMENT_TEXT/g"
, но вам все равно нужно будет определить, хотите ли вы модификатор g
, точки, заключительные знаки доллара и т. д.