如何将长文本附加到 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}
我有一个 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}