Проблема устранена путем замены ~
на путь к вашему домашнему каталогу.
Или вы можете использовать
perl -pe '$thing=`cat "$ENV{HOME}/file.txt"`;s/loremipsum/$thing/g' target.txt
или другую, более удобную , конструкцию, которая сначала считывает содержимое вашего файла, а затем заменяет строку этим значением.
sed
— еще один инструмент для этого, и у него даже есть специальная команда для чтения в другом файле:
sed '/loremipsum/{
r file.txt
d
}' target.txt
Это заменяет строку , содержащую текст loremipsum
, содержимым file.txt
.
Учитывая файл target.txt
,
some text
some text loremipsum
some more text
и файл file.txt
,
This text
is inserted
команда выдаст
some text
This text
is inserted
some more text
С помощью sed
можно сделать
sed -E 'N;s/(.*)(\n) */\2\1/;/.{81}/s_^(.)(.{,79}[-+/*]) *_\2\1_;/^\n/!P;D' filename
-E
для использования расширенных регулярных выражений, облегчающих чтение N
добавляет следующую строку в буфер s/(.*)(\n) */\2\1/
объединяет строки, перемещая новую строку в начало и удаляя отступы пробелов /.{81}/
действителен для строк, содержащих более 80 символов; в этом случае выполните s_^(.)(.{,79}[-+/*]) *_\2\1_
, чтобы переместить разрыв строки на последний символ /^\n/!P
если первая строка в буфере не пуста, вывести ее D
начать заново с остатком буфера Как указал mosvy, этот скрипт имеет проблему с обратными косыми чертами в конце строки, поэтому их, вероятно, следует удалить с помощью s/\\$//
. Кроме того, если бы могли быть более длинные строки ввода (, что не является проблемой OP, но, возможно, каким-то будущим читателем ), можно было бы заменить N
на /.{80}/!N
. Таким образом, весь сценарий будет
sed -E 's/\\$//;/.{80}/!N;s/(.*)(\n) */\2\1/;/.{81}/s_^(.)(.{,79}[-+/*]) *_\2\1_;/^\n/!P;D' filename