レコードにタグ付きの固定長データファイルがあり(最初の6文字にレコードを識別する特定の文字列がある)、特定の行とその行の特定の場所にあるテキストを置き換える必要があります。
HEADER 123456
SHIPTO CODE 123 LANE HOUSTON TX
ITEM ACME BRICK
たとえば、上記のデータの配送先住所コードを変更したいとします。データは配送履歴の場所10-17(「SHIPTO」で始まる行)にあります。 sedまたはawk(または他のコマンド)を使用したいのですが、単一のコマンドラインを使用してデータを更新したいと思います。 SHIPTO行が複数ある場合はすべて更新できます。
ベストアンサー1
sedを使用してください:
$ sed -E '/^SHIPTO/ s/(.{9}).{8}/\1NuValue /' file
HEADER 123456
SHIPTO NuValue 123 LANE HOUSTON TX
ITEM ACME BRICK
仕組み:
/^SHIPTO/
これにより、次から始まる行が選択されます
SHIPTO
。これ変える次のコマンドは、これらの行にのみ適用されます。s/(.{9}).{8}/\1NuValue /
これにより、行の最初の9+8文字が一致し、行の最初の9文字がグループ1に格納されます。これらの文字はグループ1
\1
と新しい値(フォーマットを維持するには8文字でなければなりません)に置き換えられます。