Unix Sed命令替换* .txt文件中的文件名条目

时间:2015-03-15 13:01:55

标签: regex bash unix sed

我有一个class.txt文件,其中包含多个.class文件条目及其各自的路径,我想重命名.class文件名如上所述

要求:

modules/abc_1.1.3/abc.domain.ear!/APP-INF/lib/adj.jar!/ba/sr/ApplicationModule.class

为:

modules/abc_1.1.3/abc.domain.ear!/APP-INF/lib/adj.jar!/ba/sr/[ApplicationModule\$.*\.class]

我尝试使用sed命令,但没有获得所需的输出,如下所示

cat class.txt | sed "s/.class/\\\\$.*\\\.class]/g"

modules/abc_1.1.3/abc.domain.ear!/APP-INF/lib/adj.jar!/ba/sr/ApplicationModule\$.*\.class]

请帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

您必须捕获文件名:

sed 's/\([^/]*\).class/[\1\\$.*\\.class]/g'

答案 1 :(得分:0)

您需要使用捕获组才能在两个单独的组中捕获文件名及其扩展名。

$ sed 's~\([^./]*\)\.\([^/.]*\)$~[\1\\\$.*\\.\2]~' file
modules/abc_1.1.3/abc.domain.ear!/APP-INF/lib/adj.jar!/ba/sr/[ApplicationModule\$.*\.class]