Como você acrescenta uma string variável em um script?

2

Como eu adiciono uma string que tem variáveis nela?

sed 's/MIMG109AL1ARP\t[[:alnum:]]*\t/ /g'

Inicialmente, achei sed , mas não quero substituir nada, quero adicionar algo depois da linha inicial.

Algumas strings de exemplo são as seguintes:

MIMG109AL1ARP     PQHDO0542I7537

MIMG109AL1ARP     PQHDO0372I2435

MIMG109AL1LLL     QRHDO0382I2342

MIMG109AL1LLL     PQHDO362I2345

No entanto, quero que eles tenham esta aparência:

MIMG109AL1ARP     PQHDO0542I7537     appendagehere

MIMG109AL1ARP     PQHDO0372I2435     appendagehere

MIMG109AL1LLL     QRHDO0382I2342     appendage2here

MIMG109AL1LLL     PQHDO362I2345      appendage2here

Acabei de editar o arquivo para deixar minha pergunta mais clara! Eu preciso acrescentar linhas separadas separadamente, não todas as linhas. Obrigado pela sua contribuição até agora. Qualquer ajuda ou redirecionamento é apreciado!

    
por Joseph Olivier 18.11.2015 / 08:12

3 respostas

1

No sed, $ representa o final da linha. Então você pode dizer

sed -e 's/$/\twhatever/'

Se você deseja anexar apenas linhas não vazias, mas deixar linhas vazias vazias, use o seguinte (onde & in sed é a string correspondente, que nesse caso é um caractere):

sed -e 's/.$/&\twhatever/'

Ou você também pode fazer apenas a substituição em linhas não vazias:

sed -e '/./s/$/\twhatever/'
    
por 18.11.2015 / 08:20
1

Com a ajuda de um dos meus amigos, consegui que funcionasse usando essa linha!

sed 's/\(MIMG109AL1ARP..*\)\($\)/\twhatIwant/g'

A solução foi dividir a expressão em duas subexpressões. Em vez de mudar o que eu já tinha, consegui flanquear o que eu queria entre as duas sub-expressões.

Obrigado a ambos por postarem e tentarem me ajudar.

    
por 18.11.2015 / 10:46
0

Com apenas nove padrões e anexos diferentes, tente algo assim:

#! /usr/bin/perl

use strict;

my %append = ( # matchregex       => appendstring
               qr/^MIMG109AL1ARP/ => 'appendagehere',
               qr/^MIMG109AL1LLL/ => 'appendage2here',
               # more here
             );

while (<>) {
   chomp;
   foreach my $re (keys %append) {
       if (m/$re/) {
           s/$/\t$append{$re}/;
           last;
       }
   }
   print $_, "\n";
}
    
por 18.11.2015 / 11:50