【问题标题】:Append data to end of each line using unix variable through sed [duplicate]通过sed使用unix变量将数据附加到每行的末尾[重复]
【发布时间】:2017-02-10 09:45:18
【问题描述】:

我有一个文件,我想使用 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 版

注意:如果您不知道答案,那很好,但不要将其标记为重复。 您提供的参考与此问题不同。

问候, 阿斯维尼库马尔

【问题讨论】:

  • 你的问题是什么?您是否尝试过显示的 sed 命令?它的输出是什么?
  • @user3792699 :请格式化有问题的代码。在这种情况下,预计会给出一个样本输入/输出。 It's not working 根本没有解释任何东西..
  • 因为它是一个日期并且 sed 抱怨一个未知选项,我猜,日期 ($BATCH_RUN_DATE) 包含斜杠。这与 sed 的分隔符冲突。在这种情况下,您必须使用不同的分隔符,例如逗号或感叹号,例如sed -e "s!$! ${BATCH_RUN_DATE}!" data.csv

标签: bash shell unix sed


【解决方案1】:

这里有一个例子来说明你是如何做到的:

% 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 将每一行加载到模式空间中时,它会删除换行符,然后在所有模式空间操作之后,它会将换行符重新附加到模式空间的内容上,然后打印模式空间,所以我猜猜换行符在这里是一种“免费赠品”。
那么你可能会问,如果模式空间中没有换行符,第一个$ 是如何匹配的? -- 如果我不得不猜测,我可能会说,sed 只知道您使用 $ 元字符时的意思,但这只是猜测。

【讨论】:

  • sed "s/$/${BATCH_RUN_DATE}/g" data.csv sed: -e expression #1, char 10: unknown option to 's' 我已经有了这个,但它不起作用。收到上述错误信息
【解决方案2】:

如果您希望 bash 变量扩展发生,您应该将脚本本身放在双引号内

sed -i "s/$/$BATCH_RUN_DATE/" data.csv

应该做的工作。这是最简单的方法。另外,请注意您不需要全局标志,因为每行只有一个替换。

旁注

  • 检查您的sed 是否支持就地编辑选项
  • 检查$BATCH_RUN_DATE 本身是否非空。

【讨论】:

  • 我已经试过了,不行
  • 必须引用第一个$
  • @user3792699 :您使用的是什么版本的 sed?有些可能不支持-i 选项。在这种情况下,你需要做sed "s/$/$BATCH_RUN_DATE/" data.csv > tempfile && mv temp data.csv
  • 这是一个很常见的答案。请标记为重复而不是回答,以便我们将所有好的答案收集在一个地方。 Stack Overflow bash tag wiki 包含此标签的常见问题集合。提前致谢!
  • @sjsam 我的错,我以为$/会被解释为变量。
猜你喜欢
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
相关资源
最近更新 更多