2013-12-18 2 views
0

У меня есть строка ввода «abc», и мне нужны выходы «abdc» «abddc» «abdddc» «abddddc». Эта манипуляция строк будет частью Makefile. Что-то вродеМожет ли sed написать несколько выходов для одного входа?

VAR := $(shell command abc) 

, а затем VAR будет иметь значение "ABDC abddc abdddc abddddc". Что такое command Я ищу? любая команда оболочки (т. е. expr, sed, python и т. д.) хороша для меня единственным ограничением является то, что это должен быть один лайнер как можно более простой. Предположим, что я хочу, чтобы команда получила в качестве ввода целое число n (ввод строки всегда «abc»), и я получу n выходы «abdc abddc ... ab {d^n} c». Попробовав множество типов циклов, я пришел просить совета.

ответ

3

Вот Python 1-лайнер:

>>> " ".join("ab" + "d"*i + "c" for i in range(1, 5)) 
'abdc abddc abdddc abddddc' 
+3

Для полноты 'command' = python -c" print '' .join ('ab' + 'd' * i + 'c' для i в диапазоне (1, 5)) " – e271p314

1
# n = occurence wanted 
n=5 

# does not allow 0 occurence 
n_1=$((${n} - 1)) 
echo "abc" | sed ': loop 
    s/\(ab\)\(d\{0,${n_1}\}\)\(c\)/\1\2d\3/;t loop 
    " 
# or 

# allow 0 occurence 
echo "abc" | sed ": loop 
    /bd\{${n},\}c/ !s/b/bd/;t loop 

"

Не реальный один лайнер еще потому нужен эхо "ABC" перед SED (AIX/KSH: не GNU SED)

+0

Не один лайнер, но все еще очень интересно – e271p314

Смежные вопросы