Perl-скрипт в bin, который вставляет файл

Вообще говоря, если вы хотите запустить несколько команд в одной задаче cron, вам действительно следует поместить их в сценарий.

Вы не должны заключать подобное выражение в двойные кавычки. Скорее всего, это будет восприниматься буквально. Если вы действительно намерены запускать их встроенными, вы можете сделать что-то вроде следующего: bash -c 'whoami && which whoami'

Но опять же, на этом этапе вы действительно должны помещать свои команды в сценарий оболочки. .

1
25.04.2018, 22:16
3 ответа

Вы должны сохранить результат обратной кавычки в переменной скрипта и использовать его в вызове perl, например

REPL = `cat ~/foo/bar/file.txt`
perl -pe "s/loremipsum/$REPL/ge" -i ~/path/to/target.txt

Но я думаю, было бы лучше использовать сценарий perl только для замены строки содержимым файла, потому что содержимое foo / bar / file.txt может повредить вашу команду.

0
28.01.2020, 01:35

Попробуйте вместо этого:

#!/bin/bash

perl -pe "s/loremipsum/`cat ~/foo/bar/file.txt`/ge" -i ~/path/to/target.txt

Похоже, у вас проблемы с одиночными цитатами.

0
28.01.2020, 01:35

Проблема устранена путем замены ~на путь к вашему домашнему каталогу.

Или вы можете использовать

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
0
28.01.2020, 01:35

Теги

Похожие вопросы