从行尾删除两个点

从行尾删除两个点

我需要使用正则表达式删除从行尾开始并后退两个点的所有文本。

gtk2-2.24.22-2.fc20.x86_64

变成

gtk2-2.24.22-2

这是文本文件的输出rpm -qa,我需要截断结尾。

答案1

需要正则表达式?我知道这是一个有点廉价的解决方案,但是正则表达式并不是解决所有问题的良方。

例如,使用 Bash 字符串操作:

foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot

返回gtk2-2.24.22-2

您可以在文件上调用如下方法:

foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt

正则表达式擅长从头开始解析某些内容,而不是从后面解析,因为它们以“贪婪”的方式从左到右进行解析。这是可行的,但您需要比在简单的 Bash 中执行的操作更详细一些。

请注意,在 Bash 中看起来像正则表达式的东西 ( .*) 并不是“真正的”正则表达式。在真正的正则表达式中,点.代表所有字符,而*表示前一个字符(组)重复 0-n 次。然而在 Bash 中,点.表示实际的点,而*是所有字符的通配符。

相关内容