Tengo un archivo de registro y quiero buscar una cadena y solo si esa cadena encuentra un nuevo archivo para crear. ¿Cómo puedo lograr esto? Sed doenst parece encajar en este caso.
command-line
Jacknife
fuente
fuente
grep
para buscar. La-q
opción suprimirá todos los resultados y devolverá la coincidencia / no coincidencia a travésgrep
del código de salida, que es fácilmente comprobable.Respuestas:
Haga una evaluación de cortocircuito después de
grep
:grep -q
no produce salida en STDOUT, solo sale con estado de salida0
si el patrón se encuentra en el archivoSi se encuentra el patrón (
&&
), cree un archivo/newfile
por: >/newfile
.También podría optar por el
touch /newfile
enfoque habitual , o enbash
una redirección vacía, también>/newfile
lo haría.Solo para tener en cuenta, si el archivo ya existe, entonces
touch
solo cambiaría las marcas de tiempo relevantes sin truncar el archivo. Y la redirección vacía>/newfile
no se admite en todos los shells sobre la marcha (por ejemplo, enzsh
), donde debe enviar manualmente el EOF.fuente
:
?:
es la abreviatura detrue
, es un comando no operativo que siempre sale con el estado de salida 0.Solo por diversión:
donde
'string'
se reemplaza por la cadena (condición),'logfile'
se reemplaza por la ruta al archivo de registro,'newfile'
se reemplaza por la ruta real al archivo a crear, todo entre comillas simples, probablemente en el ejemplo.fuente
Puedes usar awk con su
system()
comando. Si/pattern/
se encuentra el, el bloque de código{}
se ejecutará, en este caso llamaremos atouch /tmp/my_file.txt
través delsystem()
comando.El siguiente ejemplo muestra la creación de un archivo temporal si hay mi usuario presente
/etc/passwd
.Alternativamente, podríamos usar la redirección al archivo:
fuente
No dice si desea un nuevo archivo vacío o si necesita un procesamiento más complejo para crear el archivo.
Si es lo primero, la respuesta de @heemayl es acertada.
De lo contrario, use una instrucción if:
fuente