繁体   English   中英

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

[英]Bash: How to add character at the end of a line if it doesn't exist?

假设我在一个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实现这一目标?

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

您可以使用此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个或多个逗号,并替换为给定的字符串。

假设csv字段不包含逗号,该如何处理:

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

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

您可以使用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,'约翰',3454,2018-10-12

2343,'迈克',5757,2018-10-12

使用Perl

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

输入:

$ cat pollpenn.txt
454,'steve',3434
123,'john',3454,
2343,'mike',5757
$  perl -pe " s/(,)?$/,'2018-10-12'/ " pollpenn.txt
454,'steve',3434,'2018-10-12'
123,'john',3454,'2018-10-12'
2343,'mike',5757,'2018-10-12'
$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM