我有一个包含许多行的 xml 文件,其中包含以下内容:
Save="C:\Users\Administrator\Desktop\my files\1020\A54f\Drawing965.DWG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\File1.PNG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\Other.000" Module="0"
我想删除文件名并保留其他所有内容。像这样:
Save="C:\Users\Administrator\Desktop\my files\1020\A54f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\" Module="0"
文件名和文件夹名有很大不同,但每个文件的深度是相同的。所以基本上在第 7 个 \ 之后擦除文件名
我将这个正则表达式拼凑在一起,它可以工作,但是 xml 其他部分的文件名正在被删除:
s/([a-zA-Z0-9_.-]+)\.([a-zA-Z0-9.]{3})$//g
这将使用 GNU sed 完成:
它的工作方式如下:
\(
我记得上面使用and之间的东西\)
(这些是捕获组)。\\.*\..*
- 这是一个文字反斜杠(注意我必须转义它,所以有两个)后跟任意数量的字符,然后是一个文字点(这是文件名),然后是直到 a 的任何内容"
(这是我们开始第二个捕获组的地方)。\1
后跟一个文字反斜杠,然后是第二个捕获组的记住内容和\2
.一旦你确认它做了你想要的,只需添加
-i
就地替换:输入:
输出:
Perl 方式:
演示和解释