Cuando se trata de entradas potencialmente no higienizadas, me gusta ver todo el trabajo 'enunciado' línea por línea para una inspección visual antes de ejecutarlo (especialmente cuando es algo destructivo como limpiar los buzones de las personas).
Entonces, lo que hago es generar una lista de parámetros (es decir, nombres de usuario), alimentarlo a un archivo en un registro por línea, de esta manera:
johndoe
jamessmith
janebrown
Luego abro la lista vim
y la destruyo con expresiones de búsqueda y reemplazo hasta que obtengo una lista de comandos completos que deben ejecutarse, así:
/bin/rm -fr /home/johndoe
/bin/rm -fr /home/jamessmith
De esta manera, si su expresión regular está incompleta, verá en qué comando tendrá problemas potenciales (es decir /bin/rm -fr johnnyo connor
). De esta manera, puede deshacer su expresión regular y volver a intentarlo con una versión más confiable. El cambio de nombre es conocido por esto, porque es difícil ocuparse de todos los casos extremos como Van Gogh, O'Connors, St. Clair, Smith-Wesson.
Tener set hlsearch
es útil para hacer esto vim
, ya que resaltará todas las coincidencias, por lo que puede detectar fácilmente si no coincide o coincide de manera no intencionada.
Una vez que su expresión regular es perfecta y detecta todos los casos en los que puede probar / pensar, generalmente la convierto en una expresión sed para que pueda automatizarse completamente para otra ejecución.
Para los casos en que el número de líneas de entrada le impide realizar una inspección visual, le recomiendo hacer eco del comando en la pantalla (o mejor aún, un registro) antes de que se ejecute, por lo que si se produce un error, sabrá exactamente qué comando causó que falle Luego puede volver a su expresión regular original y ajustar una vez más.
printf "foo bar\nbaz bat" | xargs echo whee
cederáwhee foo bar baz bat
. ¿Quizás agregar las opciones-L
o-n
?