r
используется для чтения файла и добавления его в текущую точку.
Точка в вашем примере - это адрес /EOF/
, что означает, что этот скрипт найдет строку, содержащую EOF
изатем добавьте файл, указанный $thingToAdd
после этой точки.Затем он обработает остальную часть файла.
Другими словами:
$fileToAddItTo + $thingToAdd = $newFileOutput
-------------- ----------- --------------
1 5 1
2 6 2
3 3
EOF EOF
4 5
6
4
Вы можете увидеть это в действии в следующей расшифровке:
pax$ cat file1 ; echo === ; cat file2
file1_line:1
file1_line:2
file1_line:3
file1_line:4 EOF
file1_line:5
===
file2_line:1
file2_line:2
pax$ sed '/EOF/r file2' file1
file1_line:1
file1_line:2
file1_line:3
file1_line:4 EOF
file2_line:1
file2_line:2
file1_line:5
И, в ответ на вопрос в вашем комментарии о том, будет ли он делать это для каждой строки, содержащей строку EOF
, да, это будет:
pax$ cat file1 ; echo === ; cat file2
file1_line:1
file1_line:2 EOF
file1_line:3
file1_line:4 EOF
file1_line:5
===
file2_line:1
file2_line:2
pax$ sed '/EOF/r file2' file1
file1_line:1
file1_line:2 EOF
file2_line:1
file2_line:2
file1_line:3
file1_line:4 EOF
file2_line:1
file2_line:2
file1_line:5
И, этосделает это для каждой строки , содержащей строку EOF
.Обычно вы бы ограничивали что-то вроде этого строками, содержащими only EOF
string, так как обычно это так (с EOF
единственным содержимым этой строки).Вы можете сделать это, просто изменив адрес на /^EOF$/
(^
и $
являются якорями начала строки и конца строки соответственно).
В противном случае он получитстроки, которые вы можете не ожидать, например, содержащие HEREOF
, WRITEOFF
или NEOFACISM
.