如何在Shell脚本中从第n行开始将字符串附加到文件?

时间:2019-07-01 16:08:51

标签: shell sed sh

我想在第二行开始的每一行末尾添加一个字符串到文件。

这是我的文件budget.txt

id,budget
d4385ff7-247f-407a-97c6-366d8128c6c7,
50548d0a-257c-44f5-b175-2e7efa53dc35,
e15965cf-ffc1-40ae-94c4-b450ab190233,
b9286b97-2575-4c98-bd24-1393d5309e76,

我期望的输出如下。我想从第二行开始添加字符串“ True”。

id,budget
d4385ff7-247f-407a-97c6-366d8128c6c7,True
50548d0a-257c-44f5-b175-2e7efa53dc35,True
e15965cf-ffc1-40ae-94c4-b450ab190233,True
b9286b97-2575-4c98-bd24-1393d5309e76,True

最短的bash命令可能是什么。 非常感谢 感谢您的帮助

1 个答案:

答案 0 :(得分:3)

在运行以下命令之前,请确保在文件上运行dos2unix budget.txt,通常.txt文件起源于Windows,因此行尾不同。

awk 'NR>1{$0=$0"True"}1' file
id,budget
d4385ff7-247f-407a-97c6-366d8128c6c7,True
50548d0a-257c-44f5-b175-2e7efa53dc35,True
e15965cf-ffc1-40ae-94c4-b450ab190233,True
b9286b97-2575-4c98-bd24-1393d5309e76,True

此处,NR是记录数,默认情况下,awk记录与行相同。因此,如果您执行NR>1,它将告诉awk在行号大于1的{..}内执行操作。

或使用sed,在此将行$的结尾替换为True

sed '2,$s/$/True/' file
id,budget
d4385ff7-247f-407a-97c6-366d8128c6c7,True
50548d0a-257c-44f5-b175-2e7efa53dc35,True
e15965cf-ffc1-40ae-94c4-b450ab190233,True
b9286b97-2575-4c98-bd24-1393d5309e76,True