Проблема с одинарными кавычками в скрипте "sh -c", запускаемом из "find"

В этой задаче вы можете обнаружить, что формат других _vhosts _access.log богаче, чем вам нужно. Я рекомендую вам выбрать несколько ваших любимых столбцов, например. awk '{print $2, $8}' other_vhosts_access.log > small.log, а затем манипулировать small.log, который вам удобнее просматривать на глаз.

Проблема объясняется наhttps://httpd.apache.org/docs/2.4/logs.html:

... commonly used format string is called the Combined Log Format. It can be used as follows. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

Похоже, это то, что вы используете. Вы процитировали example.comв своем (очищенном )журнале, указав, что такой сайт, как example.com, имел HREF на ваш сайт, а браузер включил в свой заголовок «Referer :www.example.com». ПОЛУЧИТЬ запрос.

Весьма вероятно, что /page1 имеет HREF на /page2. Некоторые браузеры отправляют заголовок реферера страницы 1 при запросах страницы 2. Вы можете полагаться на это, и grep для «page2. *стр.1'. Или вы можете полагаться на исходный IP-адрес, как в принятом ответе. В этом случае вы, вероятно, захотите удалить другие отвлекающие столбцы, которые могут привести к ложным совпадениям, и использовать для анализа упрощенный файл small.log.

2
05.01.2020, 20:34
1 ответ

Строка в одинарных кавычках никогда не может содержать одинарных кавычек.

Решением этой головоломки в вашем случае будет замена каждого внутреннего 'в скрипте в -строке sh -cна'\''(или'"'"').

Это

  1. временно выйти из строки в одинарных кавычках (первый 'в '\''завершает строку в одинарных кавычках ),
  2. вставьте литерал'(the \'в '\'', который вы могли бы также написать как "'", но это слишком много кавычек и делает его нечитаемым ), и тогда
  3. конкатенировать, что с оставшейся исходной строкой в ​​одинарных кавычках (последняя 'в '\''начинает новую строку в одинарных кавычках ).

Тогда команда sh -cбудет выглядеть как

sh -c '
ffmpeg -i "$1" -c:a "$2" -c:v "$3" \
    -vf "subtitles=$1.$4:'\''force_style=fontsize=$5,fontname=$6'\''" \
    "$1.$7" -hide_banner'...arguments as before...
2
27.01.2020, 22:02

Теги

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