linux - 使用 find 和 sed 将文件名插入文件

标签 linux bash sed find

我有数百个 .htm 文件,我需要替换 <title>sometext</title>与实际文件名。 例如: 我有一个名为 records-england.htm 的文件我需要更换 <title>sometext</title>在这个文件中,文件名像这样 <title>records-england.htm</title>

如果没有扩展名会更好——但这并不重要。 我试过这样但它不工作:

find . -name *.htm | while read file; do sed "s|<title>sometext</title>|<title>$file</title>|g" {} \; done

有什么建议吗?

最佳答案

您可以使用 awk文件名。需要是 gnu awk >= 4.1由于-i inplace

awk -i inplace '{a=FILENAME;sub(/\.htm$/,"",a);gsub(/<title>[^<]*<\/title>/,"<title>"a"</title>")}1' *.htm

这将改变 <title>sometext</title> (其中 sometext 可以是任何东西)到 <title>filename(without extension)</title>

关于linux - 使用 find 和 sed 将文件名插入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28873502/

相关文章:

linux - 防止覆盖 char 驱动程序 linux 的 WRITE 函数

node.js - express.js api 应用程序中的内存泄漏

linux - 读取位于 LINUX 服务器上的 CSV 文件并更新 SQL Server 数据库中的表

perl - ls 的 Bash 别名,按 "type"打印多列

java - Ant 公然忽略 JAVA_HOME 环境变量

date - 如何将当前日期或时间添加到文件中每一行的末尾?

bash - 删除所有以小写字符开头的行

python - 如何在Linux上使用python检测系统ACPI G2/S5软关闭事件

linux - bash 变量替换与 grep 默认行为

ubuntu - 使用 sed 在新行上获取匹配的字符串