
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 the
grep`. 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 grep
und awk
in einer einzelnen Pipeline ist selten eine gute Idee, da „ awk
kann“ alles grep
kann:
awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt