拥有 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声明之外,我还对其他解决方案持开放态度。感谢
答案 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(避免错误的多线)但它是可选的,特别是如果你通过自己创建文件来确保单声道线