сценарии оболочки для замены токенов во всех файлах в папке - PullRequest
0 голосов
/ 09 августа 2010

HI

Я не очень хорошо разбираюсь в сценариях оболочки linux. Я пытаюсь использовать следующий сценарий оболочки для замены

токена номера редакции $rev -<rev number> во всех html-файлах в указанном каталоге

cd /home/myapp/test
set repUpRev = "`svnversion`"
echo $repUpRev
grep -lr -e '\$rev -'.$repUpRev.'\$' *.html | xargs sed -i 's/'\$rev -'.$repUpRev.'\$'/'\$rev -.*$'/g'

Кажется, это не работает, что не так с приведенным выше кодом?

Ответы [ 3 ]

1 голос
/ 09 августа 2010
rev=$(svnversion)
sed -i.bak "s/$rev/some other string/g" *.html
0 голосов
/ 09 августа 2010

Вот как вы показываете последнюю строку:

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, точки, заключительные знаки доллара и т. д.

0 голосов
/ 09 августа 2010

Что такое $ rev в строке регулярного выражения? Это другая переменная? Или вы ищете строку '$ rev'. Если последнее - я бы предложил добавить '\' перед $, иначе это будет рассматриваться как специальный символ регулярного выражения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...