使用另一個命令的輸出重命名檔案的單行命令

使用另一個命令的輸出重命名檔案的單行命令

我有一個從文件中提取單字的命令。

我想使用它提取的單字重命名該檔案。

我用來提取單字的命令,稍後我將使用它來重命名檔案名稱.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

在單一管道中使用grepand很少是一個好主意,因為can do everything可以:awkawkgrep

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

相關內容