Einzeiler-Befehl zum Umbenennen einer Datei unter Verwendung der Ausgabe eines anderen Befehls

Einzeiler-Befehl zum Umbenennen einer Datei unter Verwendung der Ausgabe eines anderen Befehls

Ich habe einen Befehl, der ein Wort aus einer Datei extrahiert.

Ich möchte die Datei mit dem extrahierten Wort umbenennen.

Der Befehl, den ich verwende, um das Wort zu extrahieren, das ich später verwenden werde, um es umzubenennenDateiname.txt, ist das Folgende:

$ grep -e "some words" -e "other words" filename.txt | awk '{print $1}' 

Dateiname.txtInhaltsbeispiel:

dasdadas
asdasda
asdas
matched some words
asdas
asda

Erwartetes Ergebnis:Dateiname.txtwird umbenannt inübereinstimmend.txt.

Ich hoffe irgendwie, dass dies mit einem Einzeiler-Befehl erledigt werden kann.

Das wird nicht funktionieren, aber vielleicht so etwas wie:

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`. Danke.

Antwort1

#!/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"

Antwort2

Die Verwendung von grepund awkin einer einzelnen Pipeline ist selten eine gute Idee, da „ awkkann“ alles grepkann:

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

verwandte Informationen