![使用文件本身中的特定文本重命名文件名的开头](https://linux22.com/image/17021/%E4%BD%BF%E7%94%A8%E6%96%87%E4%BB%B6%E6%9C%AC%E8%BA%AB%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E6%96%87%E6%9C%AC%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E5%BC%80%E5%A4%B4.png)
我的目录中有很多文件 ( file1.txt
, file2.txt
, ...)
每个文件都包含一堆行。其中一行是特定文本,thetext
后跟随机数字,如thetext56
、thetext21
等。
我想使用文件本身中的特定文本重命名文件名的开头。所以,file1.txt
将是thetextXXfile1.txt
,file2.txt
将是thetextXXfile2.txt
,等等。
添加addtext
在开头的简单重命名命令是
rename 's?^?addtext?' *.html
在获取文件中的特定文本时
sed '/thetext/!d' *.html
但我不知道如何将它们结合起来。
答案1
我建议当您想要做的是根据匹配从文件中读取一行时,这grep
是一个更好的工具。sed
欢迎您替换sed
下面的循环结构。请注意,我还使用了该-m 1
选项,以便 grep 只查找第一个匹配项:
for file in *.html; do
text="$(grep -m 1 "thetext" "$file")"
rename "s?$text?" "$file"
done