別のコマンドの出力を使用してファイル名を変更する1行コマンド

別のコマンドの出力を使用してファイル名を変更する1行コマンド

ファイルから単語を抽出するコマンドがあります。

抽出した単語を使ってファイル名を変更したい。

後で名前を変更するために使用する単語を抽出するために使用したコマンドファイル名.txt、次のように:

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

ファイル名.txtコンテンツの例:

dasdadas
asdasda
asdas
matched some words
asdas
asda

予想される結果:ファイル名.txt名前が変更されますmatch.txt

1行のコマンドでこれを行うことができたらと思います。

これはうまくいきませんが、次のような場合もあります。

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`。ありがとうございます。

答え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

単一のパイプで and を使用することは、grepすべての操作を実行できるため、良い考えではありません。awkawkgrep

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

関連情報