Я полагаю, что команда «Ниже» может работать. Как было проверено, у меня она работала нормально
sed -n '/Jul 9 [0-9]\{2\}:/,$p' /var/log/secure| sed '/Jul 9 [0-9]\{2\}:/d'
Проблема заключается в том, что вы устанавливаете переменную в строку, содержащую экранированные пробелы. Вы делаете var='foo\ bar'
, что означает, что строка сохраняется с \
. Однако затем вы используете переменную в кавычках (good ), но это означает, что она ищет файл с именем foo\ bar
, а не файл с именем foo bar
. При установке переменной либо заключает в кавычки строку , либо экранирует пробелы, но не делает и то, и другое:
readonly log_file=/Users/jim.turner.m1/OneDrive\ -\ obfuscated/Shell\ Scripts/sanitize.log
или
readonly log_file="/Users/jim.turner.m1/OneDrive - obfuscated/Shell Scripts/sanitize.log"
Любой из них должен работать. Также обратите внимание, как я изменил вашу переменную, чтобы использовать буквы нижнего регистра, поскольку использование CAPS для переменных оболочки является плохой практикой, поскольку это соглашение для переменных среды и иногда может привести к конфликтам имен переменных. Наконец, очень незначительный момент: вам не нужен $(pwd)
, вы можете просто использовать переменную PWD
и, возможно, вы захотите использовать heredoc , чтобы все было аккуратно и чисто. Если сложить все это вместе с еще парой улучшений, получится:
# Define log file location.
# Log file can be updated later for portability. But for now, I want to keep it in a personal directory.
#
readonly log_file="/Users/jim.turner.m1/OneDrive - obfuscated/Shell Scripts/sanitize.log"
# Prep log file
#
prep_log()
{
cat << EoF > "$log_file"
==============================================================
Sanitize.sh started $(date).
Sanitizing $PWD
==============================================================
EoF
}