2014-11-20 6 views
0

이 bash 스크립팅에서이 명령을 실행하고 싶습니다.bash 스크립트에서 sed 명령을 실행하십시오.

코드 :

#!/bin/bash 
line=39; 
d=d; ## For delete line 
`echo "sed '$line$d' /etc/passwd"`; 

하지만 실행할 때, 나는이 오류가있어 :

sed: -e expresion #1, character 1: unknow command <<'>> 

내가 echo "sed \'$line$d\' /etc/passwd"과 노력을;

그러나 같은 문제

...

답변

1

당신은 당신이 single-quoting하여 그들을 확장을 방해하지 않는 당신의 변수를 호출 할 때 보험에 가입해야합니다. 이제 single-quotesdouble-quotes 내에 사용하는 것이 좋지만 유의해야합니다. 또한 필수는 아니지만 두 개의 변수를 연속하여 넣을 때는 모호성을 방지하기 위해 중괄호를 사용하는 것이 좋습니다. 스크립트에서, 상기, 당신의 sed 명령은 작동 잘 같은 :

sed -e "${line}${d}" /etc/passwd 

어떤 출력합니다 /etc/passwd 마이너스 라인 $linestdout합니다. sed -i

+0

을 기억하려는 경우 간단하게 유지하고 주석을 추가, 그는 내가 믿는 sed''사용하여 제거하고자합니다. 지금은 'sed'명령조차도 없다. 문제는 나에게 보인다. 변수를 중괄호로 묶지 않고 달러로 끝내려했다. – ShellFish

+0

'd = d'를 호출하기 바로 전에'pastebin'의 코드를 보십시요. –

+0

예, 그 부분을 간과했습니다. 이것은 확실히 더 나은 대답입니다 :) – ShellFish

1

라인 (39)을 삭제하려면 사용 장소에 /etc/passwd를 편집하려면 단순히 수행

#!/bin/bash 
line=39; 
sed -i "${line}d" /etc/passwd 

Sed의 입력 파일로 두 번째 인수와 명령으로 첫 소요됩니다. 추가 플래그 -i을 사용하면 출력을 즉시 입력 파일로 재지 정할 수 있습니다. 이것은 sed 'command' file > file과 같지 않습니다. 빈 파일이됩니다.

또한 쉘에 man sed을 실행하는 것이 좋습니다. `d` 확장해야

+0

'line 39'을 어디에서 삭제합니까? 'stdout'에 출력합니까? 또는'/ etc/passwd'에? –

+0

'/ etc/passwd'는 입력 파일이며, pastebin에서 그의 코드를 확인하십시오. – ShellFish

+0

내가 한 것처럼'foo'/etc/password는'cat/etc/passwd'에서만 작동합니다. 'edit in place'에'-i'를 포함시켜야합니다. –

0
#!/bin/bash 

# delete line 39 by editing inline via sed; 
sed -i '39d' /etc/passwd 

당신은 내가 생각하지 않는 나오지 행동

+0

문제는 내가 줄을 모른다는 것입니다. 줄 번호를 찾아서 이름을 비교합니다. 이 경우 – Guille

+0

의 경우 @ShellFish 답장이 좋습니다. – NeronLeVelu

관련 문제