Я бы предпочел perl
для этого:
$ cat ip.txt
He drove his car to the cinema. He then went inside the cinema to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema.
$ # forward counting is easy
$ perl -pe 's/\bcinema\b/$&.++$i/ge' ip.txt
He drove his car to the cinema1. He then went inside the cinema2 to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema3.
\bcinema\b
слово для поиска, используя границы слов, чтобы оно не совпадало как часть другого слова. Например, \bpar\b
не будет соответствовать apart
или park
или spar
ge
и g
для глобальной замены. e
позволяет использовать код Perl в разделе замены $&.++$i
представляет собой конкатенацию совпадающего слова и предварительно увеличенного значения $i
, которое имеет значение по умолчанию значение 0
Для реверса нам нужно сначала получить счетчик...
$ c=$(grep -ow 'cinema' ip.txt | wc -l) perl -pe 's/\bcinema\b/$&.$ENV{c}--/ge' ip.txt
He drove his car to the cinema3. He then went inside the cinema2 to purchase tickets, and afterwards discovered that it was more then two years since he last visited the cinema1.
c
становится переменной окружения, доступной через хэш %ENV
или с помощью perl
в одиночку, проглотив весь файл
perl -0777 -pe '$c=()=/\bcinema\b/g; s//$&.$c--/ge' ip.txt
Да, autofs (, также известная как «automount» ), подходит для этого сценария, когда вы хотите совместно использовать каталоги, такие как /usr/local и /opt, между несколькими вычислительными узлами.
Вам также нужен протокол для удаленного доступа к файловой системе с сервера или распределенной системы, из которых NFS, возможно, является более простым выбором, но есть и многие другие. Autofs может помочь вам установить эти общие ресурсы на ваших узлах.
Если вы используете дистрибутив Linux, использующий systemd (, что, скорее всего, так и есть ),вы можете использовать systemd automount unit для настройки automount (= autofs )для монтирования /usr/local и /opt, которые вы можете настроить напрямую из /etc/fstab.
Например, если у вас есть сервер NFS "fserv1" и вы используете эти два монтирования только для чтения -с него:
# entries in /etc/fstab for shared directories: fserv1:/export/usr_local /usr/local nfs ro 0 0 fserv1:/export/opt /opt nfs ro 0 0
Затем вы можете настроить systemd для их автоматического монтирования, добавив noauto,x-systemd.automount
в параметры монтирования, например:
# entries in /etc/fstab for shared directories: fserv1:/export/usr_local /usr/local nfs ro,noauto,x-systemd.automount 0 0 fserv1:/export/opt /opt nfs ro,noauto,x-systemd.automount 0 0
См. эту статью в вики Arch Linux для получения более подробной информации о настройке systemd для автоматического монтирования каталогов. (Ничего из этого не относится конкретно к Arch Linux, их вики — просто очень хороший источник документации по Linux в целом.)
Что касается вашего вопроса о том, что использование общих библиотек считается доступом для запуска автоматического монтирования, да, это сработает, как и ожидалось. Система autofs реализована внутри ядра Linux, поэтому любой доступ к любому файлу в этом каталоге вызовет монтирование и продолжит доступ к файлу только после завершения монтирования. Запуск двоичного файла или загрузка разделяемой библиотеки — это обычный доступ к файлам, который, как и ожидалось, вызовет автоматическое монтирование.
Как уже упоминалось, вам по-прежнему необходимо использовать протокол удаленной файловой системы, такой как NFS, поэтому просто монтировать их при загрузке напрямую (вообще пропуская autofs )определенно является вариантом... Основные преимущества использования autofs/automount заключаются в том, что загрузка машины не будет блокироваться до тех пор, пока монтирование не будет готово, или произойдет сбой, если монтирование недоступно (, например, если сервер не работает или в сети произошел сбой ), а также autofs/automount может повторить попытку монтирование файловой системы, которая ранее была недоступна, потенциально повышая надежность системы.