Нет, настроить нельзя.
Вы, вероятно, не используете /usr/local/lib/systemd/systemd
для чего-либо еще, вы, вероятно, могли бы организовать симлинк или привязать монтирование.
Как systemd использует сценарии /etc/init.d? перечисляет четыре разных каталога, которые systemd использует для системных служб.
Например, с помощью sed
sed -n 's/^.*MATCH1_TEXT.*MATCH2_TEXT\(.*\)MATCH3_TEXT.*$/\1/p'
предполагая, что совпадающие тексты встречаются не более одного раза в строке и по порядку.
Если MATCH1_TEXT
может появиться в любом месте строки, то другой способ взглянуть на проблему состоит в том, чтобы игнорировать все строки, в которых его нет, поэтому программа становится
sed -n '/MATCH1_TEXT/!d;s/.*MATCH2_TEXT\(.*\)MATCH3_TEXT.*$/\1/p'
Если MATCH2_TEXT
может встречаться более одного раза, например. ввод был
text MATCH1_TEXT stuff MATCH2_TEXT and MATCH2_TEXT until MATCH3_TEXT
, тогда вопрос в том, какой результат требуется, until
или and MATCH2_TEXT until
? Аналогичный вопрос возникает с повторяющимися копиями MATCH3 _TEXT. С ними можно справиться с помощью немного более сложных программ sed. Например, чтобы сохранить самую длинную строку
sed -n '/MATCH1_TEXT/!d;/MATCH2_TEXT.*MATCH3_TEXT/!d;s/MATCH2_TEXT/\n/;s/^.*\n\(.*\)MATCH3_TEXT.*$/\1/p'
который сначала отбрасывает все неподходящие строки, а затем заменяет первое вхождение ПОИСКПОЗ2 _ТЕКСТ на новую строку (в строке никогда не будет новой строки )затем выбирает текст между новая строка и ПОИСКПОЗ3 _ТЕКСТ.
Некоторые языки, такие как perl
и python
, расширили операции, доступные в регулярных выражениях, чтобы разрешить «минимальное совпадение», которое может помочь в этих случаях, но не требуется. sed
с его способностью зацикливаться по условию является строго более мощным, чем регулярные выражения.
Tested and worked fine
Команда
sed -n '/MATCH1_TEXT/p' filename | perl -pne "s/ /\n/g"| sed -n '/MATCH2_TEXT/,/MATCH3_TEXT/p'| sed -e '1d' -e '$d'
output
until
Всякий раз, когда мы видим слово «экстракт», первой мыслью, которая должна выйти, должно быть, grep может помочь здесь.
Здесь мы сначала выбираем релевантные строки, а затем передаем их другому grep, который затем извлекает текст, найденный между текстами match2 и match3. Это даже извлечет несколько совпадений 2/3 в строке.
$ grep MATCH1_TEXT file |\
grep -oP '(?<=MATCH2_TEXT).*?(?=MATCH3_TEXT)'
Недостаточно данных примера, чтобы быть уверенным в ваших фактических требованиях, но если предположить, что ваш пример достаточно канонический, так что
MATCH1_TEXT
, MATCH2_TEXT
и MATCH3_TEXT
находятся на одной строке MATCH1_TEXT
всегда предшествуетMATCH2_TEXT
MATCHn_TEXT
может совпадать внутриTHEMATCHn_TEXTS
затем вы можете использовать один вызов perl
или GNU grep
для извлечения необходимых данных
grep -oP 'MATCH1_TEXT.*?MATCH2_TEXT\K.*?(?=MATCH3_TEXT)'
С вашей строкой примера данных вывод будетuntil
(с одним начальным и конечным пробелом ).