
Tengo un comando que extrae una palabra de un archivo.
Quiero cambiar el nombre de ese archivo usando la palabra que extrajo.
El comando que uso para extraer la palabra, que usaré más adelante para cambiarle el nombrenombre de archivo.txt, es el siguiente:
$ grep -e "some words" -e "other words" filename.txt | awk '{print $1}'
nombre de archivo.txtejemplo de contenido:
dasdadas
asdasda
asdas
matched some words
asdas
asda
Resultado Esperado:nombre de archivo.txtpasará a llamarsecoincidente.txt.
Espero que esto se pueda hacer usando un comando de una sola línea.
Esto no funcionará, pero tal vez sea algo como:
mv filename.txt $(grep -e "some words" -e "other words" filename.txt | awk '{print $1}').txt
Note: Im certain that there will only be one match with the
grep`. Gracias.
Respuesta1
#!/bin/bash
old_file_name=$1 # take an argument for the file you want to muck with
new_file_name=$(grep -e "some words" -e "other words" "${old_file_name}" | awk '{print $1}' | head -n 1).txt
mv "$old_file_name" "$new_file_name"
Respuesta2
Usar grep
y awk
en una sola canalización rara vez es una buena idea, ya que awk
puede hacer todo grep
:
awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt