我有一个文件,我希望使用SED将值附加到每行末尾的unix变量中。
我已经通过AWK实现了这个目标,但我想在SED中实现这一目标
像这样的事情。我已经尝试过以下命令,但它无法正常工作。sed -i 's/$/"$BATCH_RUN_DATE"/g' data.csv
错误
sed: -e expression #1, char 10: unknown option to `s'
GNU sed版本4.2.1
注意:如果你不知道答案没问题,但不要将其标记为重复。 您提供参考的那个与此问题不同。
此致 Aswinikumar
答案 0 :(得分:2)
这是一个如何做到的例子:
% cat subject.txt
Studid StudName Asp.Net DBMS Unix
1 Ani 75 62 80
2 George 90 95 82
3 Jake 45 30 40
4 Dennie 89 92 90
%
% my_var="R2D2"
%
% sed "s/$/${my_var}/" subject.txt
Studid StudName Asp.Net DBMS UnixR2D2
1 Ani 75 62 80R2D2
2 George 90 95 82R2D2
3 Jake 45 30 40R2D2
4 Dennie 89 92 90R2D2
关于这个sed
表达式的棘手问题是为什么我不需要在替换的替换部分中重新插入$
换行符?。<登记/>
我相信这是因为当sed
将每一行加载到模式空间时它会删除换行符,然后在所有模式空间操作之后,它会重新附加换行符到模式空间的内容然后打印模式空间,所以我猜新线是一种免费的#34;在这里。
然后你可能会问这个问题,如果模式空间中没有换行符,第一个$
如何匹配? - 如果我不得不猜测,我可能会说,sed
只知道你使用$
元字符时的意思,但这只是猜测。
答案 1 :(得分:1)
如果希望bash变量扩展发生,你应该把脚本本身放在双引号中
sed -i "s/$/$BATCH_RUN_DATE/" data.csv
应该做的工作。这是最简单的方法。另外,请注意,您不需要全局标记,因为每行只有一个替换。
<强>图片的标题说明强>
sed
是否支持就地编辑选项$BATCH_RUN_DATE
本身是否为非空。