Usando Sed com Regex

2

Eu precisaria editar os valores em um arquivo delimitado por dois pontos ( : )

Eu gostaria de substituir o conteúdo do arquivo usando expressão regular. Depois de um grep para confirmar que o item existe no sistema de arquivos. Eu gostaria de editar o conteúdo dentro dele usando sed.

Estou aberto ao uso de outras ferramentas. Isso me ajudaria.

EDITAR:

Até agora eu tenho tentado usar sed para modificar o conteúdo do arquivo de texto em test.txt. A solução atual que eu poderia pensar é sed.

 sed -i "s/^\($newEvent:$newPerson:[^:]*\):[^:]*:/:$newQty:/" test.txt 
 echo "item Qty has been updated successfully!"

Existe uma maneira de editar o conteúdo depois de uma correspondência de sequência de eventos & & pessoa e modificar o conteúdo dessa linha que corresponda.

Antes de qualquer conteúdo de entrada no arquivo de texto

Birthday Party:John Harris:1:10:1

Enter Event: Birthday Party
Enter Person: John Harris


a)  Update Event
b)  Update Person
c)  Price
d)  Update Item brought
e)  Update Quantity Sold 
f)  Back to main menu
Please enter your choice: d
New Qty Sold : 38
Qty Sold  has been updated successfully!

a)  Update Event
b)  Update Person
c)  Update Item brought
d)  Update Quantity Sold
e)  Back to main menu
Please enter your choice: f

Após inserir o conteúdo no arquivo de texto

 Birthday Party:John Harris:1:10:1
    
por Len 28.01.2014 / 15:59

2 respostas

1

Não está claro o que exatamente você quer, mas que tal usar read ou awk?

echo -e "Happy Birthday:Mom Annie:12.99:197:101\nMeow Meow:Dad:11.11:1:1" | while IFS=: read -r event person date num1 num2 _ ; do echo $person; done

echo -e "Happy Birthday:Mom Annie:12.99:197:101\nMeow Meow:Dad:11.11:1:1" | awk -F: '$1 ~ /Happy.*/{print $1, $3, $NF}'
echo -e "Happy Birthday:Mom Annie:12.99:197:101\nMeow Meow:Dad:11.11:1:1" | awk -F: '$1 ~ /Happy.*/{print $0}'

Relevante: link

Considere reformular sua pergunta mostrando a entrada e a saída desejada.

    
por 28.01.2014 / 16:25
0

Para tarefas de texto mais complexas, considere o uso de Perl ou Python ou mesmo awk ( presumivelmente na instalação básica do seu sistema). sed(1) é bom até onde vai, mas a sua sintaxe é arcana (e mais adequada para tarefas únicas, IMVHO).

    
por 30.01.2014 / 15:02