2010-01-26 3 views
1

에 나오지 I가 떠들썩한 파티에서 다음 변수를Susbtitution 공백

_day 23. 45. 56. ... 

this is ok_day 23. 45. 56. 
에 : 나는 FO는 모든 라인에서 SUBST을 원하는

var1="this is ok" 

및 파일에

그래서 행의 처음에 var1을 추가합니다.

나는이

sed -e "s/_/${var1}"_"/g" ${filename} 

과 노력하지만 난 오류

이 공간 때문에 경우 나도 몰라를 얻을. 나도 ched /| sed하지만 아무 것도

어떤 힌트?

감사

+1

sed의 오류를 정확히 알면 도움이됩니다. $ filename에 공백이있을 수 있습니까? 셸 변수를 항상 큰 따옴표 (예 : "$ filename")로 보호하십시오. – marco

+0

나는 왜 당신의 방법이 저를 위해 작동하지 않는지 지금 이해할 수 있다고 생각합니다. "this is ok"예제로 시도하면 모두 작동합니다. 하지만 뭔가 다른 것을 시도는, 지금 내 문자열 온다에서 : \t \t 읽어 ST1 ST2 ST3 <<< $ (고양이 $ {filespecial} | 그렙 C) \t \t stotal = "$ (ST1)의 $ (ST2)의 $의 ST3" 그래서 그 문제는 stotal과 같습니다 : 만약 내가 그 이유가 (읽음 <<<) 또는 문자열 concatentation, 내가 어디에 공간이 필요합니다 모르겠다 – asdf

답변

1
그냥 쉘을 사용할 수 있습니다

#!/bin/bash 
var1="this is ok" 
while read -r line 
do 
    case "$line" in 
     _*) line=${var1}$line;; 
    esac 
    echo $line 
done <"file" 

출력

$ cat file 
sldfj 
_day 23. 45. 56. 
alskjf 

$ ./shell.sh 
sldfj 
this is ok_day 23. 45. 56. 
alskjf 

당신이 절대적으로 sed를 사용하려는 경우,

sed -e "/^_/s/^/$var/" file 

또는 AWK와

awk -v var="$var" '/^_/{$0=var $0 }1' file 
+0

아이디어를 주셔서 감사합니다. 그러나 아무도 작동하지 않습니다. – asdf

+0

나는 당신의 방법이 왜 저에게 효과가 없는지 지금 이해할 수 있다고 생각합니다. 내가 "이게 괜찮 았어"라는 예제로 시도하면, 그들 모두가 작동합니다. 하지만 뭔가 다른 시도, 지금 내 문자열에서 오는 : st1 st2 st3 <<< $ (cat $ {filespecial} | grep c) stotal = "$ st1 $ st2 $ st3"그래서 stotal 문제가 보인다 : 내가 그 이유가 내가 (공평한 <<<<) 또는 문자열 concatentation을 얻는 방법인지 모르겠다. 공백이 필요하다. – asdf

+0

그들 중 누구도 작동하지 않는다는 것을 의미 하는가? 어떤 오류가 있었습니까? – ghostdog74

1

당신은 줄의 시작 부분에 $var1을 넣어하지 않습니다 준 SUBST 패턴 :

sed -e "s/^/$var1/g" "${filename}" 
+0

그것은 작동하지 않습니다 – asdf

+0

그것은 : 나는 그것을 성공적으로 시도 : . – mouviciel

0
var1="this is ok"; 
echo _day 23. 45. 56. | 
    sed "s/^/${var1}/" 

출력 또는

this is ok_day 23. 45. 56. 

를 사용 AWK (아무의 간섭이 정규식이 필요없는 주변)

,451,515,
echo _day 23. 45. 56. | 
    awk '{print "'"$var1"' " $1}' < abc.txt 
2

당신은 _ 큰 따옴표를 사용할 필요가 없습니다 당신은 g lobal 수정을 추가해서는 안 : $var1

sed -e "s/_/${var1}_/" "${filename}" 

이때 공백이 문제가되지 않습니다. $filename에있는 공백은 문제가 될 수 있습니다.

+0

"_"은 substituion – asdf

+0

에 추가되지 않았습니다. 질문에서'_'을'this is ok_'로 바꿔야합니다. 내가 오해 했습니까? – mouviciel

+0

나는 당신의 방법이 왜 나를 위해 작동하지 않는지 지금 이해할 수 있다고 생각한다. 내가 "이게 괜찮 았어"라는 예제로 시도하면, 그들 모두가 작동합니다. 하지만 뭔가 다른 시도, 지금 내 문자열에서 오는 : st1 st2 st3 <<< $ (cat $ {filespecial} | grep c) stotal = "$ st1 $ st2 $ st3"그래서 stotal 문제가 보인다 : 나는 그 이유가 내가 그것을 얻는 방법인지 알지 못한다. (<<<) 또는 문자열 concatentation을 읽는다. – asdf

0

이 경우 따옴표로 "this is ok"를 묶어야하며 큰 따옴표는 사용하지 마십시오. 마찬가지로

:

$ VAR1 = '이 OK 인'쉘되는

이유 다르게 사용 인용 부호에 따라 공백 처리 ....