使用另一个命令的输出重命名文件的单行命令

使用另一个命令的输出重命名文件的单行命令

我有一个从文件中提取单词的命令。

我想使用它提取的单词重命名该文件。

我用来提取单词的命令,稍后我将使用它来重命名文件名.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

相关内容