найти патерн и добавить и заменить его в файле - PullRequest
1 голос
/ 24 марта 2012

Я хочу найти шаблон и добавить его в файл.

Если быть точным, вот пример моего шаблона, в файле сотни.

         <size>30</size> needs to be replaced with <size>30,-1</size>

Но число вместо 30 является переменной (это может быть любое число от 0 до 99)

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

также я видел пример, где код находится в .sed файле

      for example: sed replace.sed datafile.xyz > new.xyz 

как мне этого добиться?

Спасибо

Ответы [ 3 ]

3 голосов
/ 24 марта 2012

С помощью sed вы можете сохранить часть сопоставленного текста в скобках и включить ее в замену:

http://www.grymoire.com/Unix/Sed.html#uh-4

Так, например:

sed 's:<size>\([0-9][0-9]*\)</size>:<size>\1,-1</size>:g' ...
0 голосов
/ 24 марта 2012

Я знаю, что это не было помечено под perl, поэтому не стесняйтесь игнорировать это.Но с perl's positive look-ahead и look-behind вы можете сделать что-то вроде этого -

perl -pe 's/(?<=\<size\>)([0-9]{2})(?=\<\/size\>)/$1,-1/' yourfile
0 голосов
/ 24 марта 2012

... и о чтении команд sed из файла:

s:<size>\([0-9][0-9]*\)</size>:<size>\1,-1</size>:g

и вызове его:

sed -f commands.sed file.html   

Если у вас несколько команд, поместите каждую в свою строку.

...