
У меня есть команда, которая извлекает слово из файла.
Я хочу переименовать этот файл, используя извлеченное из него слово.
Команда, которую я использую для извлечения слова, которое я позже буду использовать для переименованияимя_файла.txt, заключается в следующем:
$ grep -e "some words" -e "other words" filename.txt | awk '{print $1}'
имя_файла.txtпример содержания:
dasdadas
asdasda
asdas
matched some words
asdas
asda
Ожидаемый результат:имя_файла.txtбудет переименован всовпало.txt.
Я надеюсь, что это можно сделать с помощью однострочной команды.
Это не сработает, но может быть что-то вроде:
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`. Спасибо.
решение1
#!/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"
решение2
Использование grep
и awk
в одном конвейере редко бывает хорошей идеей, поскольку awk
может делать все, что grep
угодно:
awk '/(some|other) words/ {print $1}' filename.txt | xargs -I{} mv filename.txt {}.txt