2013-02-14 4 views
6

나는 쉘 스크립트의 일환으로이 같은 나오지도 명령을 실행해야sed를 명령 줄 인수와 함께 사용 하시겠습니까?

나오지도의/브래드/피트/g '내가 명령 줄 인수로 브래드를 제공하기로하고

와 sed이

같은 명령을 실행 S/$ 1/피트/g

이 명령이 작동하는 동안, 내가 무엇을 것 알고 싶은 건 따옴표를 제거하지 않고이 명령을 어떻게 수행 할 수 있는가하는 것입니다. 따옴표가 필요한 대체 문자열에 내용이있을 수 있기 때문입니다.

나는 따옴표에 자신이 없기 때문에 약간의 조정으로 어떻게 작동하는지보고 싶습니다.

답변

15

할 수 있습니다 sed "s/$1/pitt/g" 또는

sed 's/'$1'/pitt/g' 또는 명령 행 인수는 간단한 단어, sed 's/'"$1"'/pitt/g'가 아닌 경우.

+0

두 번째 요령을 자세히 설명해 주시겠습니까? 이중 따옴표는 어떻게 도움이 될까요? 어떤 입력이 필요할까요? – Dude

+0

은 '둘 이상의 단어'와 같이 입력됩니다. 하지만 (sed가 해석 한) 특수 문자가 포함되어 있다면 좀 더 복잡해집니다. –

+0

네, 저를 걱정하고 있습니다. ( – Dude

3

당신이 그것을 할 수있는 두 가지 방법이 있습니다 :

1)를 사용하여 따옴표

sed "s/$1/pitt/g" 

2

) 문자열로 명령을 구성하고 평가와 실행은

SEDCMD="s/$1/pitt/g" 
eval sed $SEDCMD 

eval 메서드는 매우 유연하지만 코드 삽입에 취약하기 때문에 위험한 것으로 간주됩니다. 입력을 신뢰하지 않으면 # 2를 사용하지 마십시오.

업데이트 : 의견이 맞습니다. eval을 사용할 때 이점이 없습니다 (전 sed와 함께 eval을 항상 사용했고, 모르겠다 왜 ....) 나중에 사용하기 위해 sed 문자열을 작성하는 것은 강력합니다. 그래서 새로운 3)을 추가하고 사람들에게 모의 2를 남깁니다

3) 문자열로 명령을 구성하고 그 중 하나 이상을 실행하십시오

FOO='s/\(.*\)bar/\1baz/' 
BAR="s/$1/pitt/g" 
sed -e $BAR -e $FOO <infile >outfile 
+2

'eval'은 * zero * benefits을 가진 끔찍한 생각입니다 .. –

+0

입력을 신뢰하지 않으면 # 1을 사용하지 말고 코드 삽입을 수행 할 수 있습니다 –

+0

@ 다른 사람 : 하나의 코드 삽입 예를 보여주십시오. –

관련 문제