固定長ファイルの特定の位置にある特定の行の文字列を置き換える

固定長ファイルの特定の位置にある特定の行の文字列を置き換える

レコードにタグ付きの固定長データファイルがあり(最初の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文字でなければなりません)に置き換えられます。

おすすめ記事