Como imprimir a linha de um arquivo que contém os caracteres correspondentes no padrão

1

Estou tentando imprimir todas as linhas de um arquivo que tenha os mesmos caracteres do padrão correspondente. Aqui está meu padrão -

CurrentPrincipal[MRC]
CurrentPrincipalLegalEventAssociation

No arquivo eu tenho as linhas como as abaixo

823,agg.listgroup,CurrentPrincipal[MRC],CompanyElementDefinition
d4f170,atom.list,CurrentPrincipal[MRC][Type][*],CompanyElementDefinition
1097,agg.listgroup,CurrentPrincipalLegalEventAssociation,CompanyElementDefinition
c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition
8798c3,atom.list,CurrentPrincipal[MailingAddressStreetLine1][*],CompanyElementDefinition

Estou repetindo meu padrão e imprimindo as linhas correspondentes do arquivo. O que eu preciso é, quando eu iterar meu padrão CurrentPrincipal[MRC] , eu deveria ter apenas sua linha correspondente

d4f170,atom.list,CurrentPrincipal[MRC][Type][*],CompanyElementDefinition

e quando o padrão é CurrentPrincipalLegalEventAssociation , eu deveria ter apenas

c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition

Meu requisito é ignorar o [ ] da linha enquanto o padrão é correspondente. Eu tentei o meu melhor para colocar a minha questão em afronta. Deixe-me saber se mais alguma coisa é necessária de mim. Agradecemos antecipadamente.

    
por Alex Raj Kaliamoorthy 04.01.2018 / 15:06

3 respostas

2

Você parece querer que os caracteres [ e ] sejam tratados literalmente, em vez de indicar um intervalo de caracteres. Você pode fazer isso escapando deles:

grep 'CurrentPrincipal\[LegalEventAssociation\]' file

dado:

$ cat file
823,agg.listgroup,CurrentPrincipal[MRC],CompanyElementDefinition
d4f170,atom.list,CurrentPrincipal[MRC][Type][*],CompanyElementDefinition
1097,agg.listgroup,CurrentPrincipalLegalEventAssociation,CompanyElementDefinition
c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition
8798c3,atom.list,CurrentPrincipal[MailingAddressStreetLine1][*],CompanyElementDefinition

então

$ grep 'CurrentPrincipal\[LegalEventAssociation\]' file
c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition

Como alternativa, use a opção -F ou --fixed-strings para dizer ao grep para tratar todos os caracteres literalmente:

$ grep -F 'CurrentPrincipal[LegalEventAssociation]' file
c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition
    
por 04.01.2018 / 15:15
1

grep parece fazer o que você quer.

grep 'word' filename

Imprimirá todas as linhas no arquivo 'filename' que contenha 'word'.

    
por 04.01.2018 / 15:08
0

Usando o seguinte, a saída do arquivo aparece na próxima linha do arquivo após a linha de pesquisa do padrão.

sed -n '/CurrentPrincipal\[MRC\]/p' filename | sed -n '2p'  

Saída

d4f170,atom.list,CurrentPrincipal[MRC][Type][*],CompanyElementDefinition  
sed -n '/CurrentPrincipalLegalEventAssociation/,+1p' l.txt | sed -n '2p'

Saída

c755ad,atom.list,CurrentPrincipal[LegalEventAssociation][Type][*],CompanyElementDefinition
    
por 04.01.2018 / 17:06