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.