2017-03-22 1 views
0

을 사용하여 특정 위치의 문자를 변경하는 방법 :내가 프로그래밍 다른 매개 변수를 설정 변경하고자하는 파일이 쉘 변수

$ cat ex.dat 
line 1 
here's another line 
this is the number I want to change --> 1e-11 
more lines 

내가 값 5., 1020.1e-11을 변경하고자합니다. 다음과 같은 내용 :

mkd() 
{ 
    mkdir $1; 
    cd $1 
} 
for j in 1 2 3 4 5 ; do 
    mkd WS$j 
    cp ../ex.dat . 
    sed -ie '3s/1e-11/${j}./' ex.dat 
    cd .. 
done 

내 접근 방식이 작동하지 않습니다. 1e-11$j의 값으로 대체하려면 어떻게해야합니까? 중괄호는 점 전에 잘 작동한다 않고

$ cat WS3/ex.dat 
line 1 
here's another line 
this is the number I want to change --> ${j}. 
more lines 
+0

* "작동하지 않음"* 무엇을 의미합니까? 특정 행동을 설명하는 것은 다른 사람들에게 도움이된다. –

+3

_double-quote_ 쉘에 의해'$ {j}'가 확장되도록'sed' 스크립트를 이중 인용한다. 또한'-ie'는 접미어'e'가있는 백업 파일을 생성합니다. 아마도'-i -e' 또는 간단히'-i'를 사용하려고했을 것입니다. 또한 원하지 않는 수정을 막기 위해 일반적으로 모든 쉘 변수 참조를 이중 인용 부호로 묶으십시오. – mklement0

답변

1

당신은 나오지도, 및 $ J에서 $ {J}를 확장 따옴표를 사용할 수 있습니다.

sed -ie "3s/1e-11/$j./" ex.dat 
2

보십시오 : 쉘이 그 값으로 변수를 대체하지 않습니다

sed -ie '3s/1e-11/'"${j}"'./' ex.dat 

작은 따옴표 내부.

관련 문제