Explicação de 'sed'

2

Eu tenho um arquivo de texto enorme chamado helo.lst, no qual cada linha começa com o formato:

#=GS N4TFW2_FUSC1/96-161      AC N4TFW21

Estou interessado apenas na parte N4TFW2_FUSC1 . Eu preciso extrair essa parte do restante do texto e aplicar o mesmo para todo o arquivo de texto.

Descobri que o script a seguir funciona, mas não consegui entender como.

cat helo.lst | sed 's/^#=GS\s\([A-Z0-9_]*\)\/.*//1' > helo_id.lst

Alguém pode explicar o que está acontecendo depois de s/

AFAIK, por exemplo sed 's/Mark/Euro/g' de_currency.txt , altera todas as ocorrências de Mark com Euro no arquivo de_currency.txt . Mas no meu exemplo, o script parece mais complicado do que isso.

    
por user16432 27.11.2015 / 03:27

1 resposta

0

Conforme a sintaxe do sed:

/ original / substitution / 1 time

dividindo o original

^ início da linha

# = GS string para pesquisar

espaço de

\

() \ para tirar significado de (como é usado no shell; () para indicar a variável a ser substituída na parte de substituição (agrupamento)

[A-Z0-9_] [] é para um caractere, que pode ser de A a Z, 0 a 9 e _

* significa 0 ou mais vezes

\ / as \ é tomar o significado do shell, ele representa a string terminando com "/"

. * consome / combina todo o resto até o final da linha

decompondo a substituição

\ 1 correspondência de regexp da primeira string (variável) na string original (referência anterior [ao agrupamento])

Atenção: esta é a sintaxe do GNU sed. Se no OS / X ou * BSD, você tem que usar gsed

Link para o artigo sed sobre exemplos avançados:

link

    
por 27.11.2015 / 04:47