Заменить дефис на новую строку в сценарии оболочки

#bash #shell #sed

#bash #оболочка #sed

Вопрос:

У меня есть вывод команды, переданный в список переменных, который имеет значения, разделенные дефисом.

 echo "$LIST"

- @rnc/comp@1.0 - @rnc/comp@2.1 - @rnc/list@0.2 - @rnc/sell@0.17 - app@20.10
  

Я хотел бы преобразовать их в строки

 * @rnc/comp@1.0
* @rnc/comp@2.1
* @rnc/list@0.2
* @rnc/sell@0.17
* app-version@20.10
  

Я устал от sed, но не получаю требуемого результата.

 COMP=$LIST | sed 's/- / \n* /g/'
  

выходной ответ:

n* @rnc/comp@1.0 n* @rnc/comp@2.1 n* @rnc/list@0.2 n* @rnc/sell@0.17 n* app@20.10

Ответ №1:

Я рекомендую использовать ruby, который может выполнять все, что могут делать awk / grep / sed и т. Д., И что они не могут делать. Таким образом, вам просто нужно носить с собой один инструмент вместо нескольких инструментов. В этом случае вы просто разбиваете и печатаете каждый элемент:

 ruby -ne 'a=$_.split(/s*-s*|s*n/); for i in a; print "* #{i}n" if i != ""; end'
* @rnc/comp@1.0
* @rnc/comp@2.1
* @rnc/list@0.2
* @rnc/sell@0.17
* app@20.10
  

Ответ №2:

Вы можете попробовать это:

 COMP=$LIST | sed 's/- /n/g'| sed 's/^/* /g' 
  

Комментарии:

1. Мне нужен GNU-sed, и вам нужно избавиться от пустой строки. Я протестировал, но не могу опубликовать форматированный вывод.