向 linux 中的文件内容添加新值

add new values to a file content in linux

2 个文件(fileA、FileB)

文件A

015638|00001059
015639|00001059
015640|00001059
015644|00001158
015645|00005795
015646|00000721
015648|00003804
015649|00005795

文件B

05052015

想要(注意:最后一个值只是今天的日期)

015638|00001059|05052015|03312015
015639|00001059|05052015|03312015
015640|00001059|05052015|03312015
015644|00001158|05052015|03312015
015645|00005795|05052015|03312015
015646|00000721|05052015|03312015
015648|00003804|05052015|03312015
015649|00005795|05052015|03312015

我有一个有效的代码,但有点惊讶为什么有一个 .在 $ (在 sed 语句中)让它工作之前。

 sed "s/.$/|$(cat FileB)|$(date +"%m%d%Y")/" FileA

任何人都可以解释为什么它有效吗?除了 sed 语句之外,我也对其他解决方案持开放态度。谢谢

Can anyone explain why it worked?

我没有工作。该点 (.) 匹配最后一个字符,并且在您替换时,该字符将被删除:

015638|0000105|05052015|03312015
015639|0000105|05052015|03312015
...
              ^oops

如其他答案所示,它无法正常工作,因为它正在删除 FileA 中每一行的最后一个字符。

但是,删除 . 会得到您想要的结果:

sed "s/$/|$(cat FileB)|$(date +"%m%d%Y")/" FileA

即把line end$)替换成FileB的内容(文件只有1行),date用[=16=分隔].

sed "s/[^0-9]*$/|$(head -1 FileB)|$(date +"%m%d%Y")/" FileA

可能更安全,并且以您捕获的这段代码的方式 - 删除任何非数字最后一个字符(space,制表符,...) - 取 FileB 的 1 行(避免错误的多行)但它是可选的,特别是如果您为此目的自己创建文件来确保单行