在linux中为文件内容添加新值

时间:2015-03-31 17:15:27

标签: linux awk sed

拥有 2个文件(fileA,FileB)

FILEA

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

FILEB

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声明之外,我还对其他解决方案持开放态度。感谢

3 个答案:

答案 0 :(得分:0)

  

任何人都能解释为什么会有效吗?

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

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

答案 1 :(得分:0)

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

但是,删除.会获得所需的结果:

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

也就是说,将line end$)替换为FileB(文件只包含1行)和date |分隔的内容。

答案 2 :(得分:0)

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

可能更安全,并且会妨碍您捕获此代码 - 删除任何非数字的最后一个字符(空格,制表符......) - 取一行FileB(避免错误的多线)但它是可选的,特别是如果你通过自己创建文件来确保单声道线