【问题标题】:sed add different lines in different filessed 在不同的文件中添加不同的行
【发布时间】:2018-03-10 18:51:59
【问题描述】:

我正在尝试找到一种方法来运行多个 sed 命令,这些命令将行添加到不同文件的开头(在 Mac OS 上)。

这在从终端运行时有效。

sed -i '' '1i\
\\version \"2.19.65\"\
\\language \"english\"\
\\include \"dynamics-defs.ily\"\
altosaxINotes = \\transpose c ef {\
\\relative c {\
' altosaxI.ily

但我想在不同的文件中添加稍微不同的文本:

sed -i '' '1i\
\\version \"2.19.65\"\
\\language \"english\"\
\\include \"dynamics-defs.ily\"\
altosaxIINotes = \\transpose c ef {\
\\relative c {\
' altosaxII.ily

我有大约 30 或 40 个要运行,它们都略有不同。是否可以将它们全部组合到一个终端命令中,或者使用 Mac 的自动机,或者可能是更好的解决方案?

【问题讨论】:

  • 在什么意义上更好?你可以写一个shell脚本。

标签: sed automator


【解决方案1】:

这可能对你有用(GNU sed):

# create a function f with one parameter
f(){ cat <<! >tempFile && sed -i '1e cat tempFile' ${1}.ily; }
\\version "2.19.65"
\\language "english"
\\include "dynamics-defs.ily"
${1}Notes = \\transpose c ef {
\\relative c {
!
# call the function
f altosaxI

然后可以将函数 f 包含在 for 循环或脚本中。

【讨论】:

  • 感谢您的回答,但我想我最初的问题还不够清楚。我的每个 sed 代码都单独工作。我想知道如何连续运行 40 个这样的代码,而不必单独运行每个代码。
  • @CraigDabelstein 在上面的例子中,每个 sed 脚本都使用参数来替换,也是正在操作的文件的名称。您可以编写一个脚本来调用该函数的次数与您有文件要更改的次数一样多,和/或对数据文件中列出的更改使用循环。
  • 谢谢。我试图让这个脚本工作,但它给了我一个“未终止的替代模式”错误。
  • @CraigDabelstein 上述 sed 命令不包括任何替换(tempFile 附加到原始文件)。也许您在复制命令时出错了?
猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2017-02-13
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多