Sed: substitui um dígito (s) específico (s)

2

Eu tenho dados em uma tabela. E em uma coluna eu preciso substituir alguns índices (números de 1 a 23) por 3-4 dígitos de números de amostra como: 2347,3856 etc.

Assim, a coluna original se parece com:

SF=1,2
SF=12,7
SF=17,4

E a saída deve ser:

SF=2347,3856
SF=8553,9539
...

O problema é: se eu fizer isso para uma amostra (1- > 2720), tudo bem; mas substituir 2 por alguma coisa criará uma bagunça, etc., e não vejo como posso especificar que o número deve ser substituído se for um único (dois) dígito por exemplo? Pode haver mais de 2 números seguidos.

Desculpe se parece confuso. Eu sou iniciante.

Atualizar. Obrigado fo mgjk eu consegui parcialmente. Mas por alguma razão, a nova linha é criada após a primeira substituição consecutiva e, em seguida, o próximo número não é substituído, obviamente. Então o que eu recebo é:

SF=2347

2

SF=8553

, 7

E aqui está o código:

'sed' s / = $ {index}, / = $ {amostra}, / g; s /, $ {index} /, $ {amostra} / g; s /, $ {index}, /, $ {sample}, / g "samples.txt"

Se alguém puder sugerir por que isso acontece? Obrigada!

    
por Eugenie 02.10.2014 / 15:21

1 resposta

3

Eu acho que você está tentando fazer algo assim:

$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4

Incluir o literal '=' e ',' no seu padrão e string de substituição permitiria distinguir entre "= 1" e "= 12"

Atualização:

Para substituir ambas variáveis, no sed, você pode usar $ para igualar o fim da linha.

$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4

Vai parecer estranho quando você tem variáveis bash como $ {var} misturadas, mas deve funcionar, desde que você use aspas duplas:

por exemplo,

$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=${a},/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4

Como um aparte, se suas substituições forem enormes, você pode limpar tudo isso usando arquivos em sed. Por exemplo,

$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g

Em seguida, execute o arquivo nos dados

$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4

A desvantagem dos arquivos é que não sei como usar variáveis neles.

    
por 02.10.2014 / 15:38

Tags