Script Bash para editar muitos documentos html

0

Eu tenho um diretório com muitos documentos HTML. A maioria deles contém o codeblock

      .org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

dentro da tag <style type="text/css"> . Eu gostaria de escrever um script que remova a linha text-decoration: underline; deste bloco em todos os arquivos.

Normalmente eu escreveria um sed ou perl one-liner para simplesmente excluir cada instância de text-decoration: underline; , mas muitos dos documentos têm outras instâncias da linha text-decoration: underline que eu não removi.

Existe uma ferramenta no linux que pode facilmente fazer isso?

    
por Brian Fitzpatrick 24.08.2015 / 07:52

2 respostas

2

Tente isto:

sed '/.org-link {/,/}/{/text-decoration: underline;/d}' file

Saída:

      .org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
      }

Para editar seu arquivo "no lugar":

sed -i '/.org-link {/,/}/{/text-decoration: underline;/d}' file
    
por 24.08.2015 / 08:00
0

Usando gawk :

gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' infile

Isso excluirá somente text-decoration: underline atributos em uma classe .org-link :

user@debian ~ % cat infile
.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link1 {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }
user@debian ~ % gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' infile
user@debian ~ % cat infile
.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
      }

.org-link1 {
        /* org-link */
        color: #b58900;
        font-weight: bold;
        text-decoration: underline;
      }

.org-link {
        /* org-link */
        color: #b58900;
        font-weight: bold;
      }

Para executar um loop sobre vários arquivos HTML no mesmo diretório de trabalho, você pode usar um loop bash for com curingas:

for f in *.html; do gawk -i inplace '/.org-link {/,/}/ {if($0~/text-decoration: underline/) next} {print}' "$f"; done
    
por 24.08.2015 / 08:11