shell script para extrair entre os caracteres

3

Gostaria de extrair um nome de usuário do arquivo entre as palavras-chave "/" e "NET", como abaixo. Como posso fazer isso com programas como awk , sed ou cut .

de:

audit: command=true   rsa1/[email protected] running
audit: command=true   user2/[email protected] executing

para:

audit: command=true   rsa1 running
audit: command=true   user2 executing
    
por subbu 10.06.2015 / 18:34

2 respostas

5

Usando sed :

< inputfile sed 's/\/.*NET//' > outputfile

Usando sed no local:

sed -i.bak 's/\/.*NET//' inputfile

Resumo do comando # 1 :

  • < inputfile : redireciona o conteúdo de inputfile para sed ' stdin
  • > outputfile : redireciona o conteúdo de sed stdout para outputfile

Divisão do comando # 2 :

  • -i.bak : força sed a criar um arquivo de backup inputfile.bak e a editar inputfile no local
  • inputfile : força sed a ler a entrada de inputfile

Divisão do Regex :

  • s : afirma para executar uma substituição
  • / : inicia o padrão de pesquisa
  • \/ : corresponde a um caractere /
  • .*NET : corresponde a qualquer número de qualquer caractere até o final de uma string NET
  • / : interrompe o padrão de pesquisa / inicia o padrão de substituição
  • / : interrompe o padrão de substituição

Exemplo de saída:

~/tmp$ cat inputfile
audit: command=true   rsa1/[email protected] running
audit: command=true   user2/[email protected] executing
~/tmp$ < inputfile sed 's/\/.*NET//' > outputfile
~/tmp$ cat outputfile 
audit: command=true   rsa1 running
audit: command=true   user2 executing
~/tmp$ sed -i.bak 's/\/.*NET//' inputfile
~/tmp$ cat inputfile.bak
audit: command=true   rsa1/[email protected] running
audit: command=true   user2/[email protected] executing
~/tmp$ cat inputfile
audit: command=true   rsa1 running
audit: command=true   user2 executing
~/tmp$ 
    
por 10.06.2015 / 19:35
3

Você também pode tentar com awk :

awk '{ split($3, a, "/"); $3 = a[1]; } 1' file
    
por 10.06.2015 / 19:18