ファイルの特定の場所の文字を置き換える

ファイルの特定の場所の文字を置き換える

次のファイルがあり、2番目の場所のカンマを#に置き換えたいと思います。

1K,1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K,2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K,3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K,8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K,9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03

私はこれを試しましたが、カンマの前の文字を削除しました。

sed 's/^\(.\{2\}\),/\#/' input_file

達成された結果:

#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03

望ましい結果:

1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03

答え1

,実際に置き換える必要があるカンマは、#その場所にあります。サム:

sed 's/^\(..\),/\1#/' input_file
  • ^- ストリングアンカーの始まり

  • (..)- 最初のキャプチャされたグループには最初の2文字が含まれます。

  • \1- 最初のキャプチャグループ参照


出力:

1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03

答え2

sed 's/^\(..\),\([0-9]\)/\1#\2/' input_file

正規表現に慣れていないようです。聞いてはいけない質問と同じくらい簡単です。

答え3

use below command to get the desired result

input file u.txt

1K,1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K,2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K,3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K,8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K,9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10,,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11,,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12,,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18,,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03


command: sed "s/,/#/1" u.txt

sed "s/,/#/1" u.txt 
1K#1,,,,,,,,,,,0.10000000E+00,0.2837726134152E+08,0.6756896377655E+02
1K#2,,,,,,,,,,,0.10000000E+00,0.2837950666514E+08,0.6757007624345E+02
1K#3,,,,,,,,,,,0.10000000E+00,0.2837975330813E+08,0.6756827852038E+02
1K#8,,,,,,,,,,,0.10000000E+00,0.2610685746631E+08,0.1832495587770E+03
1K#9,,,,,,,,,,,0.10000000E+00,0.2610716318002E+08,0.1836118051089E+03
1K10#,,,,,,,,,,0.10000000E+00,0.2609596327361E+08,0.1822385749588E+03
1K11#,,,,,,,,,,0.10000000E+00,0.2610713453046E+08,0.1841214115744E+03
1K12#,,,,,,,,,,0.10000000E+00,0.2610673990054E+08,0.1846882770826E+03
1K18#,,,,,,,,,,0.10000000E+00,0.2610076439025E+08,0.1854595804085E+03

答え4

すべての「K」が「K#」である必要があるパターンを作成できる場合は、次のようにsed置き換えることができます。

sed 's/K,/K#/g' input_file

関連情報