У меня есть файл журнала, и я хочу искать его строку и только если та строка найдена новый файл, который будет создан. Как я могу достигнуть, это, sed doenst, кажется, соответствует в этом случае.
Только для забавы:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
то, где 'string'
заменяется строкой (условие), 'logfile'
, заменяется путем к файлу журнала, 'newfile'
заменяется фактическим путем к файлу для создания, все в одинарных кавычках, lik в примере.
Можно использовать awk с system()
команда. Если эти /pattern/
будет найден, то codeblock {}
будет выполняться, в этом случае мы звоним touch /tmp/my_file.txt
через system()
команда.
пример ниже шоу, создающих временный файл, если существует мой пользователь, присутствующий в /etc/passwd
.
$ awk '/xieerqi/{system("touch /tmp/my_file.txt")}' /etc/passwd
$ ls -l /tmp/my_file.txt
-rw-rw-r-- 1 xieerqi xieerqi 0 1月 25 07:58 /tmp/my_file.txt
, С другой стороны, мы могли использовать перенаправление для файла:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Вы не говорите, хотят ли Вы новый пустой файл, или если Вам нужна более сложная обработка для создания файла.
, Если первый, ответ @heemayl является пятном на.
Иначе, используйте оператор "if":
if grep -q 'search_pattern' /file
then
# Create your file here
fi
Прикрепите оценку короткого замыкания после grep
:
grep -q 'search_pattern' /file && : >/newfile
grep -q
не производит вывода на STDOUT, просто выходы со статусом выхода 0
если шаблон найден на файле
Если шаблон найден (&&
), создайте файл /newfile
: >/newfile
.
Вы могли также пойти для обычного touch /newfile
подход, или на bash
, пустое перенаправление- >/newfile
сделал бы также.
Только для замечания, если файл уже существует затем touch
был бы только изменение соответствующие метки времени, не усекая файл. И пустое перенаправление >/newfile
не поддерживается на всех готовых к работе оболочках (например, в zsh
), куда необходимо вручную отправить EOF.