ищите файл и создайте новый файл, только если условие соблюдают

У меня есть файл журнала, и я хочу искать его строку и только если та строка найдена новый файл, который будет создан. Как я могу достигнуть, это, sed doenst, кажется, соответствует в этом случае.

10
задан 25 January 2017 в 07:38

4 ответа

Только для забавы:

python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"

то, где 'string' заменяется строкой (условие), 'logfile', заменяется путем к файлу журнала, 'newfile' заменяется фактическим путем к файлу для создания, все в одинарных кавычках, lik в примере.

6
ответ дан 23 November 2019 в 04:18

Можно использовать 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 
4
ответ дан 23 November 2019 в 04:18

Вы не говорите, хотят ли Вы новый пустой файл, или если Вам нужна более сложная обработка для создания файла.

, Если первый, ответ @heemayl является пятном на.

Иначе, используйте оператор "if":

if grep -q 'search_pattern' /file
then
    # Create your file here
fi
0
ответ дан 23 November 2019 в 04:18

Прикрепите оценку короткого замыкания после grep:

grep -q 'search_pattern' /file && : >/newfile
  • grep -q не производит вывода на STDOUT, просто выходы со статусом выхода 0 если шаблон найден на файле

  • Если шаблон найден (&&), создайте файл /newfile : >/newfile.


Вы могли также пойти для обычного touch /newfile подход, или на bash, пустое перенаправление- >/newfile сделал бы также.

Только для замечания, если файл уже существует затем touch был бы только изменение соответствующие метки времени, не усекая файл. И пустое перенаправление >/newfile не поддерживается на всех готовых к работе оболочках (например, в zsh), куда необходимо вручную отправить EOF.

16
ответ дан 23 November 2019 в 04:18

Другие вопросы по тегам:

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