Cadeias de caracteres de Grep que terminam com string e suporte

0

Eu tenho uma matriz e, em seguida, o seguinte loop:

for i in "${familyNames[@]}"
do 
  name='echo "$i"'
  cat $file | grep -E \("$name"[[:blank:]]\|[[:blank:]]"$name"[[:blank:]]\|[[:blank:]]"$name"\) >> .fitnam.log

  nameFem='echo "$name"ova'
  cat $file | grep -E \("$nameFem"[[:blank:]]\|[[:blank:]]"$nameFem"[[:blank:]]\|[[:blank:]]"$nameFem"\) >> .fitnam.log
done

E o arquivo de entrada seria algo como:

Smith John(johnsmith)
Smith Jane(janesmith)
Bauer Jack(jackbauer)
Long Jackson(jackslo)

Digamos que eu esteja procurando pela string Jack . O problema é que a saída também incluiria Long Jackson . Então, preciso que a última parte de [[:blank:]]"$name" inclua ( .

[[:blank:]]"$name"(* não funciona devido a um erro de sintaxe.

[[:blank:]]"$name""("* não funciona devido a parênteses sem correspondência.

[[:blank:]]"$name"\(* não funciona devido a parênteses sem correspondência.

Como resolvo este problema?

    
por Hichigaya Hachiman 20.09.2017 / 21:54

3 respostas

0

Você deseja usar limites de palavras

grep '\<Jack\>' file

ou com aspas duplas

grep "\<$name\>" file

Ref: link

    
por 20.09.2017 / 22:56
0

Para procurar nomes pessoais (primeiros nomes):

$ name=Jack; grep -E "[[:blank:]]$name[(]" file
Bauer Jack(jackbauer)

Para pesquisar apenas nomes de família:

$ name=Bauer; grep -E "^$name[[:blank:]]" file
Bauer Jack(jackbauer)

Para procurar um primeiro nome ou um sobrenome:

$ name=Jack; grep -E "^$name[[:blank:]]|[[:blank:]]$name[(]" file
Bauer Jack(jackbauer)
$ name=Bauer; grep -E "^$name[[:blank:]]|[[:blank:]]$name[(]" file
Bauer Jack(jackbauer)
    
por 20.09.2017 / 22:54
0

O ponto-chave da sua solicitação é que a palavra-chave de pesquisa (por exemplo, Jack ) deve estar com ( e pode ter espaço em branco na frente dela, mas não é necessária.

Talvez você possa usar sed e awk para resolvê-lo.

Via sed

name='Jack'
sed -r -n '/[[:space:]]*'"${name}"'\(/p' file

Via awk

name='Jack'
awk 'match($0,/[[:space:]]*'"${name}"'\(/){print}' file
    
por 27.09.2017 / 09:47

Tags