grep PATTERN file, gzip, если шаблон существует, еще ничего не делать

Возможно, вы ищете флаг setuid/setgid. При установке этого флага на исполняемом файле исполняемый файл запускается с разрешения владельца исполняемого файла, а не пользователя, выполняющего вызов.

Вот статья в Википедии об этом

БУДЕТ КАЧЕСТВЕННОСТЬ С ЭТОЙ. Если вы устанавливаете это в сценарии bash и разрешаете запись в сценарий, вы, по сути, разрешаете любому, у кого есть разрешение на запись, выполнять любую команду в системе в качестве setuid/setgid. вам, вероятно, лучше использовать sudo.

2
26.04.2018, 12:50
2 ответа

Вы можете сначала присвоить результат grepпеременной. Затем вы можете проверить код выхода, предложенный @Mark в комментариях, или проверить, является ли результат пустой строкой, как это:

foo=$(grep $PATTERN $sourcefile)
if [ ! -z "$foo" ]
then
        echo "$foo" | gzip > compressedfile.gz
fi

или в виде одного -вкладыша:

foo=$(grep $PATTERN $sourcefile); [ -z "$foo" ] || echo "$foo" | gzip > compressedfile.gz
1
27.01.2020, 22:02
grep 'PATTERN' "$sourcefile" >compressedfile
if [ -s compressedfile ]; then
    gzip -f compressedfile
else
    rm -f compressedfile
fi

Тест -sбудет верным, если данное имя файла существует и если оно ссылается на файл, размер которого больше нуля. Файл будет существовать (перенаправление всегда создает файл, если он еще не существует )и размер будет больше нуля, если был какой-либо результат от grep.

Флаг -fдля gzipпринудительно сжимает, даже если файл будет увеличиваться (, что будет происходить, если он мал для начала ).

То же самое, почти (, так как он не сжимает вывод grep, если дляgrep)возникает какая-то ошибка чтения/записи, но использует статус выходаgrep:

if grep 'PATTERN' "$sourcefile" >compressedfile; then
    gzip -f compressedfile
else
    rm -f compressedfile
fi

или просто

grep 'PATTERN' "$sourcefile" >compressedfile && gzip -f compressedfile
rm -f compressedfile

Здесь rmпопытается удалить несжатый файл в любом случае, но поскольку мы используем rm -f, об ошибке не будет сообщено, если файл не существует (его не будет, если gzipсжал его ).


В самом общем случае я бы не советовал сохранять результат grepв переменной, так как это может вернуть гигабайты данных (мы этого не знаем ).

2
27.01.2020, 22:02

Теги

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