2017-03-01 11 views
-1

ファイル内の数字の範囲を別の範囲に置き換えたいとします。私が持っているとしましょう:ファイル内の数字の範囲を置き換えます。

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

そして、私は、それらを変更したい:私はSEDやawkのを使用してそれを行うことができますが、ただそれを正しく書くことはできません知っている

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

。それを行う最も簡単な方法は何ですか?

答えて

2

awkレスキュー!

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

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

と言うような数の範囲を変更する正規表現を探していますこれは魅力として働いた。ありがとう。 – JavaRed

0

デバイス名を変更することはありません。 とにかく、単に文字や数字を置き換えるには、オプションsをsedと併用することができます。

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 

注:

  • は、データのあなたのサンプルのためのあなたの本当の必要性
  • スイートのフィールド区切りを適応させる、他の要素が並んでいるが、あなたはこれを簡単に適応させることができない場合あなたの目的を記述してください。
関連する問題