Я пытаюсь удалить строки между двумя строками (включая две строки) только для первого совпадения, один и тот же набор строк повторяется в файле, я пытался использовать приведенное ниже, но, похоже, это не работает:

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

Кроме того, вы хотите удалить первое вхождение на месте, а не перенаправлять на стандартный вывод, поэтому что-то с помощью -i .

Первые 30 строк моего файла выглядят так:

 },{
   "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,

С уважением, Шрирам.В

1 ответ1

0

Это кажется очень сложной проблемой из-за необходимости удалять только первый экземпляр.

Например, это удаляет каждый экземпляр:

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

Это удаляет только первый экземпляр, но оставляет первую и последнюю строки:

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

Я пытался удалить их в рамках одной команды sed , но мне это не удалось. Лучшее, что мне удалось - это разбить на два файла и затем объединить их:

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

(Вам не нужны два отдельных файла, но легче понять, когда вы их используете.)

Возможно, это может быть одна команда sed использующая сгруппированные команды и буфер хранения, но она будет невероятно сложной и почти невозможной для поддержки и изменения.

Если вы хотите попробовать, посмотрите этот учебник, но будьте готовы к тому, что ваша голова начнет крутиться, когда вы перейдете к продвинутым разделам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .