Как добавить длинный текст к определенной строке в bash? - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть скрипт bash, который копирует и вставляет текстовый файл (T1, T2..T100) по сто раз. Мне нужно добавить к этому текстовому файлу определенную строку кода в 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'

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Это может работать для вас (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}
0 голосов
/ 02 ноября 2019

похоже, что ваше форматирование кода НЕ является правильным, что вызывает проблемы синтаксиса. Для большей безопасности я использовал \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

Где \ - для информирования терминала о том, что код продолжается без новой строки в приведенном выше коде.

...