2013-12-18 5 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"를 출력 할 것입니다. for 루프의 많은 유형을 시도한 후에 나는 당신의 조언을 구하기 위해 왔습니다.

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

답변

3

여기 파이썬 한 - 라이너의)

+3

완성을 위해 'command'= python -c "print" '.jin ('ab '+'d '* i +'c '가 범위 (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 

나오지 (AIX/KSH 전에 ABC 방송 ","

에코을 필요로 변경할 수 없기 진짜 하나 라이너 없음 ": 비 GNU sed를

+0

하나의 라이너가 아니지만 여전히 매우 흥미 롭습니다. – e271p314

관련 문제