ファイルから特殊文字を削除し、フィールド区切り文字を保持します。

ファイルから特殊文字を削除し、フィールド区切り文字を保持します。

固定長ファイルの最初の列のすべての特殊文字を削除できましたが、その結果、すべての後続の列は削除された文字数だけ左に移動します。スペースで区切られたファイルです。入力ファイルの行1が破損しています。 2号線は次の通りでなければなりません。文字列000022000362700は、両方の行の49番目の位置で始まります。私が経験している問題は、3つの特殊文字を削除した後にフィールドが46位置に移動することです。

GAVISCON リキッドミント 000022000362700 159588000007979400 50001584182 0006S020000
GAVISCONリキッドミントOT 000022000362700 159588000007979400 50001584182 0006S020000

私が使用するコマンドは次のとおりです。

cat file.txt | grep '[^ - ~]' | sed's/[^ - ~]//g'

これにより、次のような出力が生成されます。

    GAVISCON LIQUID PEPPERMINT OT        000022000362700   159588000007979400  50001584182        0006S020000

特殊文字を削除すると、変更されたフィールドの右側にある各フィールドが左に移動され、フィールドの開始位置が変更されました。

しばらく検索してみましたが、この問題に対する解決策が見つかりませんでした。

どうすればいいですか?

ベストアンサー1

次のコマンドを使用します。

sed -r 's/(\^|-|~)/ /g' file.txt
  • sed -r

    -r, --regexp-extended
    スクリプトで拡張正規表現を使用します。

  • / /フィールド区切り文字として使用されるスペース(またはその他の文字列)

  • (\^|-|~)

    • 最初のキャプチャグループ(\^|-|~)

      • 最初のオプション:\^

        \^^リテラル一致文字

      • 2番目のオプション:-

        --リテラル一致文字

      • 3番目のオプション:~

        ~~リテラル一致文字

もう一つのバリエーションはこれです(ありがとう@コスタス):

sed 's/[-~^]/ /g' file.txt
  • [^-~]

    • [-~^]以下のリストにある単一の文字と一致します。

      -~^リストの単一-~^文字

おすすめ記事