2010-01-25 6 views
3

5.500의 텍스트 파일에서만 5.6xx 및 5.5xx (x는 0-9 자리)의 모든 항목을 바꿔야합니다. match가 포함 된 줄이 문자열 (예 : STARTSTRING)로 시작하는 경우. 즉기본 Regexp 질문 : sed가있는 STRING으로 시작하는 줄만 수정하는 방법

STARTSTRING 5.610 4.500 3.550 5.530 
OTHERSTRING 5.600 5.500 5.500 5.600 

STARTSTRING 5.500 4.500 3.550 5.500 
OTHERSTRING 5.600 5.500 5.500 5.600 

나는이 작업을 수행 할 수있는 방법을 잘 모르겠습니다가되어야 의미합니다. 나는 sed를 사용하여 편집하고있다.

고맙습니다. :)

추신 : 필요한 경우 최신 데비안 버전을 실행하고 있습니다.

답변

3
sed -i -e '/^STARTSTRING/s/5\.[56][0-9][0-9]/5.500/g' file 
+0

이것은 정확하게 내가 찾고 있었던 것입니다. 고마워요 :) –

+0

괜찮습니다. 행운을 빕니다! –

+0

어쩌면 35.530과 같은 숫자가 나타나고이를 바꾸고 싶지 않을 때 경계를 두어야합니다. – ghostdog74

0
sed -i -e '/^STARTSTRING/s/5\.[56][0-9]{2}/5.500/g' $file 
+0

귀하는 OP가 요청한 것을하지 않습니다. –

+0

실제로, 잘못 읽은 것, 특정 줄에만 일치하는 것에 초점을 맞춘 것, 고정 – wich

1

당신이 나오지 솔루션은 35.530 같은 번호의 관리를하지 않는 AWK뿐만 아니라

$ cat file 
STARTSTRING 5.610 4.500 3.550 5.530 35.530 
OTHERSTRING 5.600 5.500 5.500 5.600 35.500 

$ awk '/STARTSTRING/{ for(i=1;i<=NF;i++) if($i ~/^5\.[56][0-9][0-9]/) $i="5.500"} 1 ' file 
STARTSTRING 5.500 4.500 3.550 5.500 35.530 
OTHERSTRING 5.600 5.500 5.500 5.600 35.500 

주를 사용할 수 있습니다.