【问题标题】:How to pass variables in sed commands如何在 sed 命令中传递变量
【发布时间】:2013-11-28 22:22:40
【问题描述】:

我正在尝试通过我的脚本传递这行代码:
row=8
title="sometitle"
sed -i $rowi"$title" hi.csv

row 代表我想在 csv 文件中插入内容的行,title 代表我想插入该行的内容。问题是sed 不会通过$row。我不能只使用命令sed -i 8i"sometitle" hi.csv,因为rowtitle 变量会发生变化,因为我在forloop 中传递了这个sed 命令。我有什么方法可以在sed 命令中传递变量吗?提前谢谢大家!

【问题讨论】:

    标签: bash csv for-loop sed


    【解决方案1】:

    我测试了你的命令,我猜你必须向 shell 指出变量是什么,所以你必须用花括号括起来,像这样:

    sed -i ${row}i"$title" hi.csv
    

    EDIT:避免错误的另一种尝试(参见 cmets):

    sed "${row} i\
    > $title
    > " hi.csv
    

    【讨论】:

    • 我收到此错误:sed: -e expression #1, char 1: expected \ after a',c' or i'`
    • @user2143205:它适用于我的版本 (sed (GNU sed) 4.2.2)。查看文档如何在您的版本中使用插入。它通常可以将它放在下一行并用反斜杠转义换行符。错误消息说明了它。 编辑:我添加了相同的命令,但分成不同的行。我认为它更适合不同的版本。
    • 好吧,尽管出现了错误,它仍然按照预期的方式进行,非常感谢您!我真的是一个初学者,但我很高兴我能来这个社区寻求帮助,尽管我是个业余爱好者。谢谢!
    【解决方案2】:
    row=8
    title=="sometitle"
    sed "${row} i\\^J${title}" hi.csv > YourFinal.csv
    

    在 ksh/AIX 下测试(所以 sed 没有 -i 选项)[^J 是用 CTRL+V+J 获得的新行]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-16
      • 2017-12-15
      • 2019-09-11
      • 1970-01-01
      • 2016-12-23
      • 2019-09-15
      • 1970-01-01
      • 2019-07-12
      相关资源
      最近更新 更多