2015-09-21 3 views
-2

Я пытаюсь заменить строку A в строке, содержащей другую строку B, которая должна быть найдена (имеется переменное содержимое между A и B, anyfile.html). Пример:sed awk: заменить строку A в строках, соответствующих строке B

font-size: 14px;"><a href="differentfilenames.html">1</a><br> 

следует заменить

font-size: 14px; background-color: rgb(51, 204, 255);"><a href="differentfilenames.html">1</a><br> 

Есть ли решение с Баш/СЭД/AWK?

Что я ... - Представьте себе матрицу с ячейками, содержащую числа - 1 в приведенном выше примере - Числа являются привязками к различным файлам; даже номер 1 связан с разными файлами. differentfilenames.html переменная строка, содержащая буквы и цифры - клетки должны получить цвет фона в зависимости от количества содержащихся в них - Итак: все клетки, содержащие 1 в качестве якоря должны получить цвет фона, как описано выше

Я пытаюсь найти решение, чтобы иметь возможность поиска строки B - 1</a><br> в этом случае, и - если это правда - заменить строку

font-size: 14px;"> 

с

font-size: 14px; background-color: rgb(51, 204, 255);"> 

к сожалению, мой первые вопросы не сработали правильно; Я думаю, теперь должно быть более ясно ...

+0

Вы знаете, что html-коды могут быть разбиты на строки, не так ли? то вы знаете риск обращения с html с регулярным выражением (awk, sed ...) – Kent

+0

Что должны быть A и B? Каков ваш «переменный контент»? Кажется, вы пытаетесь что-то вставить - я не вижу замены ... Что вы пробовали до сих пор? –

ответ

1

Я предполагаю, что у вас есть статический ввод, в котором новые строки распределяются так, как вы хотите. Как заметил Кент, это может легко сломаться.

Вот Perl один вкладыш:

perl -pe 'if (/1<\/a>/) { s/font-size: 14px;">/font-size: 14px; background-color: rgb(51, 204, 255);">/ }' yourfile.html 
0

Похоже, это то, что вам нужно (использует GNU AWK для 3-арг к match()):

$ cat tst.awk 
BEGIN { split("rgb(51,234,567) rgb(52,345,678) rgb(53,456,789)",m) } 
match($0,/(font-size: 14px;)("><a href="differentfilenames.html">([[:digit:]]+)<\/a><br>)/,a) { 
    print a[1], "background-color:", m[a[3]] ";" a[2] 
} 

$ cat file 
font-size: 14px;"><a href="differentfilenames.html">1</a><br> 
font-size: 14px;"><a href="differentfilenames.html">3</a><br> 
font-size: 14px;"><a href="differentfilenames.html">2</a><br> 
font-size: 14px;"><a href="differentfilenames.html">3</a><br> 

$ awk -f tst.awk file 
font-size: 14px; background-color: rgb(51,234,567);"><a href="differentfilenames.html">1</a><br> 
font-size: 14px; background-color: rgb(53,456,789);"><a href="differentfilenames.html">3</a><br> 
font-size: 14px; background-color: rgb(52,345,678);"><a href="differentfilenames.html">2</a><br> 
font-size: 14px; background-color: rgb(53,456,789);"><a href="differentfilenames.html">3</a><br> 

, но я должен был составить мой собственный тестовый ввод, так как вы не представили репрезентативный набор, так что это предположение, и вам, вероятно, придется самому массировать его независимо от того, как выглядит ваш реальный вход.

Смежные вопросы