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

问题描述 投票:0回答:2

我有一个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'
bash awk sed append substitution
2个回答
0
投票

看起来您的代码格式不正确,这会导致语法问题。为了安全起见,我在代码中将\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

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


0
投票

这可能对您有用(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}
© www.soinside.com 2019 - 2024. All rights reserved.