comando de una sola línea para cambiar el nombre de un archivo usando la salida de otro comando

comando de una sola línea para cambiar el nombre de un archivo usando la salida de otro comando

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 thegrep`. 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 grepy awken una sola canalización rara vez es una buena idea, ya que awkpuede hacer todo grep:

awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt

información relacionada