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

greppara buscar. La-qopción suprimirá todos los resultados y devolverá la coincidencia / no coincidencia a travésgrepdel código de salida, que es fácilmente comprobable.Respuestas:
Haga una evaluación de cortocircuito después de
grep:grep -qno produce salida en STDOUT, solo sale con estado de salida0si el patrón se encuentra en el archivoSi se encuentra el patrón (
&&), cree un archivo/newfilepor: >/newfile.También podría optar por el
touch /newfileenfoque habitual , o enbashuna redirección vacía, también>/newfilelo haría.Solo para tener en cuenta, si el archivo ya existe, entonces
touchsolo cambiaría las marcas de tiempo relevantes sin truncar el archivo. Y la redirección vacía>/newfileno 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.txttravé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