別のコマンドの出力を使用してファイルの名前を変更するワンライナーコマンド

別のコマンドの出力を使用してファイルの名前を変更するワンライナーコマンド

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

抽出した単語を使用してそのファイルの名前を変更したいと思います。

単語を抽出するために使用するコマンド。これは後で名前を変更するために使用します。ファイル名.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 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

grepおよびをawk単一のパイプラインで使用することは、awk次のことができるすべてのことを実行するため、ほとんど良い考えではありませんgrep

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

関連情報