Respostas:
Realize uma avaliação de curto-circuito após grep:
grep -q 'search_pattern' /file && : >/newfile
grep -qnão produz saída em STDOUT, apenas sai com o status de saída 0se o padrão for encontrado no arquivo
Se o padrão for encontrado ( &&), crie um arquivo /newfilepor : >/newfile.
Você também pode optar pela touch /newfileabordagem usual , ou bashum redirecionamento vazio - >/newfiletambém.
Apenas para observar, se o arquivo já existir, touchapenas as alterações de data e hora serão alteradas sem truncar o arquivo. E o redirecionamento vazio >/newfilenão é suportado em todos os shells on-the-go (por exemplo, in zsh), para os quais você deve enviar manualmente o EOF.
:faz?
:é uma abreviação para true, é um comando não-op, que sempre sai com status de saída 0.
Apenas por diversão:
python3 -c "if 'string' in open('logfile').read(): open('newfile', 'wt')"
em que 'string'é substituído pela string (condição), 'logfile'é substituído pelo caminho para o arquivo de log, 'newfile'é substituído pelo caminho real do arquivo a ser criado, tudo entre aspas simples, como no exemplo.
Você pode usar o awk com seu system()comando. Se /pattern/for encontrado, o código bloqueado {}será executado, neste caso, chamamos touch /tmp/my_file.txtvia system()comando.
O exemplo abaixo mostra a criação de um arquivo temporário se houver meu usuário presente /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
Como alternativa, poderíamos usar o redirecionamento para arquivar:
awk '/xieerqi/{f="/tmp/my_file.txt";print "" > f;close(f)}' /etc/passwd
Você não diz se deseja um novo arquivo vazio ou se precisa de um processamento mais complexo para criar o arquivo.
Se o primeiro, a resposta de @heemayl está no local.
Caso contrário, use uma instrução if:
if grep -q 'search_pattern' /file
then
# Create your file here
fi
greppara pesquisar. A-qopção suprimirá toda a saída e retornará correspondência / não correspondência atravésgrepdo código de saída, que é facilmente testável.