Bash:如果不存在,如何在行尾添加字符?

时间:2019-02-07 22:14:06

标签: bash awk sed

假设我在csv文件中包含以下文本:

454,'steve',3434
123,'john',3454,
2343,'mike',5757

我想做的是在每一行的末尾插入一个新列。但是,如上面的示例所示,并非所有行的末尾都有逗号。

最终结果应该是

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

如何使用bash实现这一目标?

5 个答案:

答案 0 :(得分:3)

awk将解决这个问题。

$ awk -F, -v OFS=, -v d="'2018-10-12'" '{$4=d}1' file

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

因为我们知道日期不是空的,所以您可以打高尔夫

$ awk -F, -v OFS=, -v d="'2018-10-12'" '$4=d' file

答案 1 :(得分:2)

您可以使用以下sed

sed "s/,\{0,1\}$/,'2018-10-12'/" file

454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'

正则表达式模式,*$最后匹配0个或多个逗号,并替换为给定的字符串。

答案 2 :(得分:1)

假设csv字段不包含逗号,怎么办:

awk -F, -v OFS=, -v q=\' '{$NF==""? p=NF: p=NF+1; $p=q"2018-10-12"q; print}' file.csv

不需要对列号进行硬编码。

答案 3 :(得分:1)

您可以使用Perl

首先,将所有',\ n'替换为'\ n',然后将所有'\ n'替换为',\ n'。

perl -pe 's/,\n/\n/g' file.txt | perl -pe 's/\n/, 2018-10-12\n/g'
  

454,'史蒂夫',3434,2018-10-12

     

123,'john',3454,2018-10-12

     

2343,'mike',5757,2018-10-12

答案 4 :(得分:1)

使用Perl

tsconfig-paths-webpack-plugin

带有输入:

 perl -pe " s/(,)?$/,'2018-10-12'/ "