【问题标题】:How can I append a long text to a specific line in bash?如何将长文本附加到 bash 中的特定行?
【发布时间】:2019-11-02 09:49:36
【问题描述】:

我有一个 bash 脚本,可以复制并粘贴一个 txt 文件(T1、T2..T100)一百次。我需要在该文本文件的 txt 文件的第 454 行附加特定的代码行。

我尝试使用 sed 和 awk,但它们似乎不能正常工作。

我试图做这样的事情,但没有成功:

awk 'NR==454{print "try:
  Mesh_1.ExportMED( r'/home/students/gbroilo/Desktop/Script/Mesh_1.med', 0, SMESH.MED_V2_2, 1, None ,1)
  pass
except:
  print 'ExportToMEDX() failed. Invalid file name?'"}1'

【问题讨论】:

  • 欢迎来到 SO,很高兴你在问题中用代码展示了你的努力,继续努力。您能否在您的帖子中提及示例输入和预期示例输出,然后让我们知道以清楚地了解问题。
  • 每当我尝试运行代码时,我都会收到以下错误:意外标记'('附近的语法错误。-我的输出应该是一个文本文件,在第 454 行添加了我要添加的这部分用 awk。它应该被添加到同一个文件中,而不是创建一个新的

标签: bash awk sed append substitution


【解决方案1】:

您的代码格式似乎不正确,导致语法问题。为了更安全,我在代码中使用\047 代表',并在输出中使用\n 代表新行。

awk 'NR==454{print "try:\n Mesh_1.ExportMED( r\047/home/students/gbroilo/Desktop/Script/Mesh_1.med\047, 0, SMESH.MED_V2_2, 1, None ,1)\n pass\nexcept:\n print \047ExportToMEDX() failed. Invalid file name?\047"}1' Input_file

或以上代码的非单行形式:

awk 'NR==454{print "try:\n Mesh_1.ExportMED( r\047/home/students/gbroilo/Desktop/Script/Mesh_1.med\047,\
0, SMESH.MED_V2_2, 1, None ,1)\n pass\nexcept:\n print \047ExportToMEDX() failed. \
Invalid file name?\047"}1'  Input_file

\ 用于让终端知道代码正在继续,上面的代码中没有任何新行。

【讨论】:

  • 这行得通!但不是将其添加到现有文本文件中,而是将所有内容(添加了 awk 的部分)打印到终端,使文本文件为空,我应该在代码末尾添加 >> Input_file 吗?
  • @GianmarcoBroilo,如果您想将输出保存到 Input_file 本身,并且如果您使用的是 gawk 较新版本,那么尽管使用 awk,您仍可以在我上面的代码中使用 gawk -i inplace ,让我知道如何然后就过去了?
  • 现在可以了!我有一个问题,我定义了一个名为 path 的计数器来代替 /home/students/gbroilo/Desktop/Scr​​ipt 因为我想为我放置的每个文件更改此目录 ${path} 但是当我用 gawk 添加它时打印 ${path} 而不是 path 的内容。我应该添加双引号吗?
  • @GianmarcoBroilo,很高兴它对您有所帮助,根据规则并为未来的用户保持问题清晰,建议在 1 个帖子中有 1 个问题,您可以为新问题打开一个新线程。您也可以选择此答案作为正确答案,也可以查看此链接,一旦我们在 SO stackoverflow.com/help/someone-answers 上得到答案,我们应该怎么做,干杯并快乐学习。
  • 您好!我尝试使用相同的命令添加文本: execfile(r"/home/students/gbroilo/Desktop/Scr​​ipt/Template_6_1/prova.py") 但现在我得到语法错误,我不知道为什么:(跨度>
【解决方案2】:

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

sed -i '454a\line one with a quote '\''\n'\''another'\''\nlast line' fileT*

另一种方式:

cat <<\!>fileInsert
line one with a quote '
'another'
last line
!
sed -i '454r fileInsert' fileT*

还有一个:

cat <<\! | sed -i '454r /dev/stdin' fileT*
line one with a quote '
'another'
last line
!

如果您想将特定文本插入特定文件,请使用 GNU 并行,如下所示:

parallel -q sed -i '/454r fileInsert{}' fileT{} ::: {1..100}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2018-03-08
    • 2010-09-30
    • 1970-01-01
    • 2011-04-09
    • 2012-03-14
    • 1970-01-01
    相关资源
    最近更新 更多