Sed:特定の1桁/ 2桁の数字を置き換える

Sed:特定の1桁/ 2桁の数字を置き換える

私のテーブルにデータがあります。列の一部のインデックス(1〜23の数字)を3〜4桁のサンプル番号(2347、3856など)に置き換える必要があります。

したがって、元の列は次のようになります。

SF=1,2
SF=12,7
SF=17,4

出力は次のようになります。

SF=2347,3856
SF=8553,9539
...

問題は:1つのサンプル(1-> 2720)に対してこれを実行してもかまいませんが、2を別のものに置き換えると混乱が発生し、数値を変更するように指定する方法がわかりません。ただ(2)数字ですか? 2つ以上の連続した数字がある可能性があります。

混乱して聞いたらすみません。私は初心者です。

直す。ありがとうマジック私は部分的に成功しました。ただし、何らかの理由で行の最初の置換後に新しい行が作成され、次の数字は明らかに置き換えられません。だから私が得るものは次のとおりです。

SF=2347

,2

SF=8553

,7

コードは次のとおりです。

'sed "s/=${index},/=${sample},/g; s/,${index} /,${sample} /g; s/,${index},/,${sample },/g" サンプル.txt'

なぜこれが起こるのですか?

ベストアンサー1

考える、次の操作を実行しようとしています。

$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4

パターンと置換文字列にリテラル「=」と「、」を含めると、「= 1」と「= 12」を区別できます。


修正する:

変える両方sed の変数は $ を使用して行末を一致させることができます。

$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4

${var}のようなbash変数を混ぜると奇妙に見えますが、二重引用符を使うとうまくいきます。

例えば、

$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=${a},/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4

ところで、代替項目が大きい場合は、sedのファイルを使用してすべてをクリーンアップできます。例えば、

$ cat ./datascript.sed 
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g

次に、データに対してファイルを実行します。

$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4

このファイルの欠点は、変数の使用方法がわからないことです。

おすすめ記事