/ r в скрипте оболочки sed - PullRequest
1 голос
/ 17 августа 2011

Я обновляю скрипт оболочки C, который использует команду sed:

sed '/EOF/r $thingToAdd' $fileToAddItTo > $newFileOutput

Я не могу найти, что означает или делает команда / r. Я думаю, что это для поиска и замены (аналогично /s..../g).

Есть идеи?

1 Ответ

4 голосов
/ 17 августа 2011

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.

...