$ perl -0777 -pe '$s="item1"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' },
'item3': { 'buy': 'bananna',
'drink': x'cooldrink',
'work': 'hard',
'study': 'science'}})
Some other content in this file.
$ perl -0777 -pe '$s="item3"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' }})
Some other content in this file.
$ perl -0777 -pe '$s="item2"; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item3': { 'buy': 'bananna',
'drink': x'cooldrink',
'work': 'hard',
'study': 'science'}})
Some other content in this file.
-0777
, чтобы удалить весь файл, и s
флаг, чтобы разрешить . *
для соответствие строкам s / * \ x27 $ s \ x27: \ s * \ {. *? \}, \ n * // s
для таких элементов, как item1
и item2
где ,
следует за }
s /, \ s * \ x27 $ s \ x27: \ s * \ {. *? \} (?!,) // s
для таких элементов, как item3
, где, как я подозреваю, вам нужно удалить ,
в предыдущей строке \ x27
шестнадцатеричный код для одинарных кавычек $ s = "item2";
на требуемый элемент, который необходимо удалить Изменить:
Для передачи переменных из оболочки (см. этот вопрос и ответ на SO для подробностей)
$ export var1='item3'
$ perl -0777 -pe '$s=$ENV{var1}; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' },
'item2': { 'buy': 'apple', 'drink': x'cola',
'work': 'slow',
'eat': 'sweet',
'travel': 'world' }})
Some other content in this file.
Вы также можете удалить несколько элементов
$ export var1='(item3|item2)'
$ perl -0777 -pe '$s=$ENV{var1}; s/ *\x27$s\x27:\s*\{.*?\},\n*//s ; s/,\s*\x27$s\x27:\s*\{.*?\}(?!,)//s' ip.txt
some other content in this file
demo({
'item1': { 'buy': 'bananna', 'drink': x'cooldrink',
'work': 'hard',
'study': 'science' }})
Some other content in this file.
Одним из улучшений ответа , предоставленного @ glenn-jackman , будет использование опции -E для mailx. На странице руководства для mailx:
-E
Не отправлять сообщения с пустым телом. Это полезно при передаче ошибок из скриптов cron (8).
Более надежный способ справиться с этим - использовать инструмент, созданный для конкретного сценария, который вы задумали (то есть для отслеживания журнала и отправки электронных писем на вновь обнаруженные закономерности).
Распаковав его и запустив, вы увидите множество реальных примеров, которые вы можете имитировать. Один из примеров, на котором вы хотите сосредоточиться, - это MODEL13, который решает задачу отправки уведомлений по электронной почте на определенные адреса электронной почты всякий раз, когда шаблон обнаруживается в одном или нескольких разных журналах.
./logrobot localhost /var/tmp/logXray autonda /var/log 60m '.*error.*_P_.*fatal.*' '.' 1 1 errchk -ndshow email=John.Blah@blah.com
В приведенной выше команде ниже приведены параметры, которые вы должны изменить по своему усмотрению:
'. * Error. * _ P _. * Fatal. *' - здесь выполняется поиск двух шаблонов во всех журналах в каталоге / var / log
/ var / log - это каталог, журналы которого вы хотите отслеживать. Если вы хотите отслеживать конкретный файл журнала, замените его абсолютным путем к файлу журнала.
Это лучший вариант, поскольку он включает необходимую логику, которая гарантирует, что будут сканироваться только новые строки, добавленные в отслеживаемый журнал (журналы). К тому же это намного эффективнее. И он также должен быть портативным.
Конечно, убедитесь, что на хосте установлен postfix, чтобы можно было отправлять электронные письма. Возможно, я что-то здесь забыл, но это должно быть сутью того, как работает инструмент.