区切り文字の前の最後の文字を削除

区切り文字の前の最後の文字を削除

入力ファイルの内容は次のとおりです。

header;header;header;header
2018/06/04;141000;bla;bla

希望の出力:

header;header;header;header
2018/06/04;1410;bla;bla

次のコマンドがありますsed

sed -i 's/.//16' $inputFile

しかし、次のように私のタイトルを削除します。

header;hder;header;header
2018/06/04;1410;bla;bla

これを防ぐために、以下を試しました。

tail -n +2 | sed -i 's/.//16' $inputFile

しかし、うまくいきません。事前にありがとう

答え1

使用awk:

awk -F ';' -v OFS=';' 'NR > 1 { sub("..$", "", $2) }; 1' <"$inputFile"

;これにより、最後の2文字が削除され、最初の行を除くすべての入力行の2番目の区切りフィールドが変更されます。

末尾を使用すると、各行1が出力されます(交換可能{ print })。

出力を新しいファイルにリダイレクトでき、後で元のファイルを置き換えることができます。

答え2

2番目の区切り文字の前にある2つの文字を削除するには(たとえば、最初の2つの区切り文字の前に常に少なくとも2つの文字があるとします)、次のようにします。

sed -i -- '1!s/..;/;/2' "$inputFile"

1!タイトル(最初)の行を変更しないでください。
残りは区切り文字の前の2文字を削除します;

関連情報