【发布时间】:2022-12-06 22:17:06
【问题描述】:
这是我的输入
/prj/mct/2.5/src/mode/session.v
/prj/act/data/1.6/src/log.v
在这里,我试图从上面的路径中找到一个数值,我想在找到数值后删除所有数据/路径。
预期产出
/prj/mct/2.5/.
/prj/act/data/1.6/.
您能否让我知道我应该如何为此编写一个 perl 脚本?
【问题讨论】:
这是我的输入
/prj/mct/2.5/src/mode/session.v
/prj/act/data/1.6/src/log.v
在这里,我试图从上面的路径中找到一个数值,我想在找到数值后删除所有数据/路径。
预期产出
/prj/mct/2.5/.
/prj/act/data/1.6/.
您能否让我知道我应该如何为此编写一个 perl 脚本?
【问题讨论】:
以下单行代码给出了预期的输出:
perl -pe 's{([^0-9]+[0-9.]+/).*}{$1.}' input.txt
-p逐行读取输入,处理后打印每一行;s{}{} 是替代品,我们没有使用 s/// 因为我们想要匹配斜杠,我们不喜欢反斜杠,因为它们很难阅读;[0-9] 匹配一个数字,^ 否定它,即 [^0-9] 匹配除数字以外的任何内容;+ 匹配前面构造的一次或多次出现,例如[^0-9]+匹配一位或多位非数字;[0-9.]+ 匹配数字和点,即一个版本;(...)括号创建一个捕获组,这里我们捕获每一行的整个开头,直到版本后面的斜线;【讨论】: