2013-01-21 2 views
1

나는 다음과 같은 스크립트를 쓰고 있어요을 나오지? 참고 : $v 값을 제어 할 수 없습니다.예기치 않은 문자

+0

'sed' 명령이 기대하는 것은 무엇입니까? 쉘이'$ v/d' 확장을 끝내면'sed' 명령이 유효하지 않습니다. '$ v'에있는 것과 일치하는 줄을 지우고 싶을 수도 있습니다.이 경우 첫 번째 근사값으로'sed "/ $ v/d"'를 사용해야합니다. 'pop'을 포함하는 첫 줄에 1 행을 찾으려면'sed "1,/pop/d"를 생성하기 위해'$ v'의 값에 대한 작업을해야합니다. 다른 일을하고 싶다면 무엇을 원하는지 설명해야합니다. –

답변

0

잘못된 방법으로 sed을 사용하고 있습니다. 당신이 sed 내부 bash는 변수를 대체하려면 내가 위에서 보여 같은

$ v="1,pop"; 
$ cat file 
1,pop 
Suku 
JohnGeorge 
stackoverflow 
serverfault 

$ sed '/'$v'/d' file 
Suku 
JohnGeorge 
stackoverflow 
serverfault 

$ sed "/"$v"/d" file 
Suku 
JohnGeorge 
stackoverflow 
serverfault 

, 당신은 따옴표로 묶어야합니다. 또한 파일에 수정 사항을 쓰려면 sed-i과 함께 사용해야합니다. 스크립트

V = '1 팝업 "

나오지"/^$의 브이 $/{

D

} "일세/이러한 방식을 사용

+0

'sed/$ v/d 파일','sed '/'$ v '/ d'파일','sed '/''$ v'/ d "파일"은 완전히 동일합니다 왜냐하면 따옴표에있는 문자 중 쉘 메타 문자가 없기 때문에 모든 인용은 메타 문자의 해석을 억제하기 때문입니다. '$ v'가 (특정) 메타 문자를 포함하고 있다면, * 큰 따옴표로 묶기를 원할 것입니다. 따라서,'sed "/ $ v/d"file'이 권장되는 형식입니다. –

0

hashbang이 있어야 스크립트가 스크립트를 실행하는 방법을 알 수 있습니다. 당신의 명령이 실행 된 이야기

#!/bin/sh 

그럼 당신은 얻을 것이다 ...

sed: 1: "1,pop/d": expected context address

.... :)

관련 문제