#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, и вам нужно избавиться от пустой строки. Я протестировал, но не могу опубликовать форматированный вывод.