如何将长文本附加到 bash 中的特定行?

How can I append a long text to a specific line in bash?

我有一个 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'

您的代码格式似乎不正确,这会导致语法问题。为了更安全,我在代码中将 7 用于 ',将 \n 用于输出中需要的新行。

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

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

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

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

这可能适合您 (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,如下所示:

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