使用文件本身中的特定文本重命名文件名的开头

Naj*_*hin 3 sed text-processing rename

我在目录中有很多文件 ( file1.txt,file2.txt , ...) 中

每个文件都包含一堆行。其中一行是特定文本thetext后跟随机数,就像thetext56thetext21等等。

我想使用文件本身中的特定文本重命名文件名的开头。所以,file1.txt将会thetextXXfile1.txtfile2.txt将会thetextXXfile2.txt,等等。

添加addtext在开头的简单重命名命令是

rename 's?^?addtext?' *.html
Run Code Online (Sandbox Code Playgroud)

在文件中获取特定文本时

sed '/thetext/!d' *.html
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将它们结合起来。

Cal*_*leb 5

我建议当您想要做的是根据匹配从文件中读取一行时,这grep是一个更好的工具sed。欢迎您sed在下面的循环结构中替换您的。请注意,我还使用了该-m 1选项,以便 grep 只关注第一个匹配项:

for file in *.html; do
   text="$(grep -m 1 "thetext" "$file")"
   rename "s?$text?" "$file"
done
Run Code Online (Sandbox Code Playgroud)