Usando o grep para imprimir números de linhas

1

Eu gostaria de usar o comando grep para imprimir um número de linha para a string que estou procurando. No entanto, quando usei o comando grep -n , ele imprime o número da linha com dois-pontos: ao lado dele. Existe alguma maneira eu posso usar o mesmo comando grep -n para imprimir um número de linha com ele sendo seguido por: dois pontos?

$ grep -n 'Captain' sometextfile.txt
3: Captain America

Eu gostaria que fosse impresso,

3 Captain America

(sem o ':')

Alguma sugestão ??

    
por Justin 10.12.2014 / 18:45

4 respostas

5

Você pode usar sed junto com grep para conseguir isso.

grep -n 'Captain' sometextfile.txt | sed 's/:/ /'

Este comando sed encontra o padrão : e o substitui por (um espaço).

Sintaxe geral - sed 's/find/replace/'

Este método substituirá apenas a primeira ocorrência de : em cada linha com . Portanto, mesmo que uma linha no arquivo de texto contenha : , ela não será afetada.

    
por Rohith Madhavan 10.12.2014 / 18:56
1

Se você quiser apenas excluir os dois pontos (e não substituí-lo por um espaço), poderá canalizar a saída de sua instrução grep por meio de tr . Seu comando seria algo como:

grep -n 'Captain' sometextfile.txt | tr -d ':'

Se você quiser substituir os dois pontos por um espaço, poderá usar:

grep -n 'Captain' sometextfile.txt | tr ':' ' '

Embora, como aponta Muru, isso removerá todos os dois pontos da linha.

    
por dagrha 10.12.2014 / 19:06
0

Você pode tentar se esse comando ajuda você

awk '/Captain America/ {printf "%s %s\n", NR, $0}'
    
por vembutech 10.12.2014 / 19:00
0

Aqui estão meus dois centavos na pergunta, use a subfunção awk:

grep -n 'Captain' file.txt | awk '{sub(":"," "); print }'

grep -n 'Captain' file | awk '{sub(":Captain"," Captain"); print }'

E aqui está o cut (que remove todos os vestígios de : , como no exemplo do dazzle):

grep -n 'Captain' file | cut -d":" -f1- --output-delimiter=" "

    
por Sergiy Kolodyazhnyy 17.04.2015 / 05:32