删除分隔符之前的最后一个字符

删除分隔符之前的最后一个字符

输入文件内容如下:

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"

;这将通过删除其中的最后两个字符来修改除第一行之外的每一行输入上的第二个分隔字段。

尾随1导致每一行被输出(它可以被替换{ print })。

您可以将其输出重定向到一个新文件,稍后您可以用该文件替换原始文件。

答案2

如果要在第二个分隔符之前删除两个字符(并假设像示例中一样,前两个分隔符之前始终至少有两个字符),请使用:

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

避免1!更改标题(第一)行。
其余的删除了分隔符之前的两个字符;

相关内容