Vaclav_ Ответов: 1

Как получить индивидуальный вывод из команды "sed =" / массива


Это не обман моего предыдущего поста, я прошу помощи, чтобы решить конкретную проблему сейчас.


Я использую "sed" с опцией "=" для получения номера строки файла первого вхождения указанного шаблона.
В документации говорится, что "sed option =" выводит номер(ы) строки, в которой найдено совпадение шаблона.
Я "собираю" результаты в переменную "индекс", используя подстановку команд.

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

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

Вот базовый сценарий bash, над которым я работаю

#retrieve first matching line number
index=$(sed -n "/$choice/=" "$PWD$DEBUG_DIR$DEBUG_MENU")
#delete matching line plus next line from file 
sed -i "/$index[1], (( $index[1]++))/" "$PWD$DEBUG_DIR$DEBUG_MENU"


Что я уже пробовал:

"Массив" выглядит как \n разделенных значений , как и ожидалось в Linux.
Все варианты, которые я пробовал, всегда возвращали весь массив, а не только выбранный индекс.

Вот часть сценария, который я использовал.


78 #удалить динамическую команду и описание
79 echo ${index[1]}
80 echo {$index[0]}
81 echo "$index[1]"
82 echo "$((индекс[1]++))"

1 Ответов

Рейтинг:
2

Vaclav_

#retrieve first matching line number
index=$(sed -n "/$choice/{=;q}" "$PWD$DEBUG_DIR$DEBUG_MENU")
#delete matching line plus next line from file 

 the solution is to run the following code here 

  #remove command line
  sed -i "${index}d" "$PWD$DEBUG_DIR$DEBUG_MENU"
  # remove description line 
  sed -i "${index}d" "$PWD$DEBUG_DIR$DEBUG_MENU"