信息
我有一个包含时间信息的字符串。我只需要从该字符串中获取月数。我正在尝试使用 sed
来完成此操作,但我还没有太多运气。使用 bash + 命令行工具是我的要求。
当前尝试
echo "1969 years 12 months 25 days 19 hours 38 minutes 24 seconds since last release" | sed -r "s/^([0-9]+).*/\1/"
返回 1969
奖金
更一般地说,我的问题是字符串的整个 "1969 years 12 months"
部分。我正在使用 date
来获取时差,但我必须考虑 1970 年的开始日期。我发现我当前的输出将 1970 表示为 1969 年零 12 个月
很奇怪。
编辑:我正在尝试使用这篇文章中的 nunk 解决方案:
除月份外,它适用于所有内容。月数差了(12印月数)。
最佳答案
这件衣服是否适合:
echo "1969 years 12 months 25 days 19 hours 38 minutes 24 seconds since last release" | sed -r 's/.* ([0-9]+) months.*/\1/'
给予
12
这里发生的事情是这样的:
- 如果按顺序满足以下所有条件,则表达式的“匹配”部分将成功:
.*
任何东西一个空格
[0-9]+
一个或多个数字(使用(
和)
“捕获”)另一个空间
months
“月”这个词.*
任何东西
- 如果成功,则保证匹配整行,因为两端都有
.*
。 - 此外,如果成功,匹配项(整行)将被
\1
替换,这是一个特殊代码,意思是“第一组捕获括号的内容。你会看到上面括号中的值是单词“月”之前的数字。
关于regex - 如何使用 sed *返回* *仅*第 n 次出现的正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25748624/