sed no lugar de exclusão entre padrões apenas primeiro jogo

0

Eu estou olhando para excluir linhas entre duas seqüências de caracteres (incluindo as duas seqüências de caracteres) apenas para a primeira ocorrência da correspondência, o mesmo conjunto de seqüências de caracteres se repetem no arquivo, tentei usar o abaixo, mas não parece para trabalhar:

sed -n -e '/prefix/,/agents/d' -e '/agents/$q' /var/saas/stats/usage_1499245200.json.2

Além disso, deseja excluir a primeira ocorrência no local e não redirecionar para a saída padrão, portanto, algo usando -i .

Primeiras 30 linhas do meu arquivo são exibidas abaixo:

 },{
   "prefix" : "AD",
   "prefix" : "CQ",
   "last" : 0,
   "last" : 0,
   "month" : 0,
   "month" : 5,
   "today": 0,
   "today": 0,
   "yesterday": 2,
   "yesterday": 0,
   "agents": 0
  },{
   "prefix" : "CS",
   "prefix" : "AE",
   "last" : 1,
   "last" : 0,
   "month" : 130,
   "month" : 0,
   "today": 0,
   "today": 20,
   "yesterday": 0,
   "yesterday": 38,
   "agents": 0
  },{
   "prefix" : "AF",
   "prefix" : "CZ",
   "last" : 0,
   "last" : 0,
   "month" : 6,

Atenciosamente, Sriram.V

    
por Sriram V 05.09.2017 / 15:15

1 resposta

0

Este parece ser um problema muito difícil, devido ao requisito de excluir apenas a primeira instância.

Por exemplo, isso exclui todas as instâncias:

sed '/prefix/,/agents/d' /var/saas/stats/usage_1499245200.json.2

Isso exclui apenas a primeira instância, mas deixa a primeira e a última linha:

sed -n -e '1,/prefix/p' -e'/agents/,$p' /var/saas/stats/usage_1499245200.json.2

Eu tentei removê-los em um único comando sed , mas não obtive êxito. O melhor que eu consegui é dividir em dois arquivos e depois combiná-los:

sed -n '1,/prefix/p' </var/saas/stats/usage_1499245200.json.2|head -n -1 >head.tmp
sed -n '/agents/,$p' </var/saas/stats/usage_1499245200.json.2|tail -n +2 >tail.tmp
cat head.tmp tail.tmp >/var/saas/stats/usage_1499245200.json.2
rm head.tmp tail.tmp

(Você não precisa de dois arquivos separados, mas é mais fácil de entender quando você os usa.)

Pode haver um único comando sed usando comandos agrupados e o buffer de armazenamento, mas será complexo e quase impossível de suportar e modificar.

Se você quiser dar uma olhada, veja este tutorial , mas esteja preparado para começar girando quando você chegar às seções avançadas.

    
por 05.09.2017 / 20:25

Tags