2012-03-18 2 views
2

파일이 있고 패턴을 다른 문자열로 대체하려고합니다.SED를 사용하여 패턴을 바꾸면 여분의 문자가 나타납니다.

#PBS -N M1-plt32-size100 
#PBS -o /home/mahmood/gem5/results/M1-plt32-size100.out 
./run -d ./results/ --config=bench1-M1-plt32-size100.conf \ 
--results=bench1-M1-plt32-size100.res config/myConfig.txt -F 2000000 

"size10"후 추가 '0'문자를 참고 : 출력 파일은 다음과 같습니다 그러나

#PBS -N bench1-M1-plt2-size15 
#PBS -o /home/results/bench1-M1-plt2-size15.out 
./run -d ./results/ --config=bench1-M1-plt2-size15.conf \ 
--results=bench1-M1-plt2-size15.res config/myConfig.txt -F 2000000 

나는이 명령

sed 's/M1-[^-]*-[^-]/M1-plt32-size10/g' filename 

를 사용합니다. 보시다시피, SED 명령에서 크기는 10으로 설정되지만 출력 파일은 "size100"

무엇이 문제이며 어떻게 해결할 수 있습니까?

답변

3

귀하의 정규식이 올바르지 않습니다. 당신은 [^-]을 가지고 있는데, 오직 하나의 하이픈없는 문자와 일치합니다. 나는 이것이 당신의 의도를 믿고 :

sed 's/M1-[^-]*-[^\.]*/M1-plt32-size10/' filename 

출력 :

#PBS -N bench1-M1-plt32-size10 
#PBS -o /home/results/bench1-M1-plt32-size10.out 
./run -d ./results/ --config=bench1-M1-plt32-size10.conf \ 
--results=bench1-M1-plt32-size10.res config/myConfig.txt -F 2000000 
+0

는 [^ \.]'무엇을 설명 할 수 *'의미와'과의 차이점은 무엇입니까 [^ -] *'?? – mahmood

+0

예. '[^ \.] *는'.'이 발견 될 때까지 0 개 이상의 문자를 의미하지만 '[^ \ -] *'는 하이픈'-'이 발견 될 때까지 0 개 이상의 문자를 의미합니다. 원본 텍스트에서'M1-'다음에 하이픈이 하나 밖에 없으므로'[^ -] * - [^ \.] *'를 사용하여 점 '.' 앞에있는'-plt2-size15'와 일치시킵니다. – anubhava

+0

괜찮습니다. 고맙습니다. – mahmood

관련 문제