2017-03-01 11 views
-1

파일의 숫자 범위를 다른 범위로 바꾸고 싶습니다.은 파일의 숫자 범위를 바꿉니다.

/dev/raw/raw16 
/dev/raw/raw17 
/dev/raw/raw18 

을 그리고 나는 그들을 수정합니다 : 나는이 말을하자 나는이 나오지 또는 AWK를 사용하여 수행 할 수 있습니다 알고 있지만 단지 올바르게 쓸 수 없습니다

/dev/raw/raw1 
/dev/raw/raw2 
/dev/raw/raw3 

. 가장 쉬운 방법은 무엇입니까?

답변

2

awk the rescue!

$ awk -F'/dev/raw/raw' '{print FS (++c)}' ile 

/dev/raw/raw1 
/dev/raw/raw2 
/dev/raw/raw3 
+0

이것은 매력적으로 작용했습니다. 감사. – JavaRed

0

나는 장치 이름을 바꾸지 않을 것이다. 어쨌든 문자 또는 숫자 만 바꾸려면 sed와 함께 's'옵션을 사용할 수 있습니다.

cat file.txt | sed s/raw16/raw1/g; > newfile.txt 

이 예에서는 raw16을 모두 raw1로 바꿉니다. 여기에 몇 가지 다른 예가 있습니다 ...

sed 's/foo/bar/'     # replaces in each row the first foo only 
sed 's/foo/bar/4'     # replaces in each row every 4. 
sed 's/foo/bar/g'     # replaces all foo with bar 
sed 's/\(.*\)foo/\1bar/'   # replace the last only per line 

+0

주셔서 감사합니다. 하지만 실제로 숫자의 범위를 변경하는 정규식을 찾고 있어요 원시 [16-18]을 원시로 말하십시오 [1-3] – JavaRed

0
# using /raw as field separator, so $2 is the end number in this case 
awk -v From=16 -v To=18 -v NewStart=1 -F '/raw' ' 
    # for lines where last number is in the scope 
    $2 >= From && $2 <=To { 
    # change last number to corresponding in new scope 
    sub(/[0-9]+$/, $2 - From + NewStart) 
    } 
    # print (default action of a non 0 value "filter") the line (modified or not) 
    7 
    ' file.txt \ 
> newfile.txt 

참고 :

  • 다른 요소가 라인에없는 경우, 데이터의 샘플에 대한 실제 필요에 대한
  • 제품군을 필드 분리를 적용하지만 당신은 쉽게 적응할 수 코드 foir 목적을
관련 문제