慷慨大方的茴香 · 广州银汉科技有限公司- TapTap· 5 月前 · |
老实的绿茶 · 愿余生一切安好_愿余生一切安好的意思_愿余生 ...· 1 年前 · |
不拘小节的毛衣 · 华为云AOM基于cassandra的亿级数据 ...· 1 年前 · |
路过的香蕉 · 三阶魔方还原公式- zqifa - 博客园· 1 年前 · |
愉快的香槟 · 百度音乐梁康妮:中国流行音乐产业现状| ...· 1 年前 · |
我想获取最后两个数字(一个整型,一个浮点型;后面跟着可选的空格),然后只打印它们。
示例:
foo bar <foo> bla 1 2 3.4
应打印:
2 3.4
到目前为止,我有以下几点:
sed -n 's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/replacement/p'
将会给我
foo bar <foo> bla 1 replacement
但是,如果我尝试将其替换为group 1,则会打印整行。
sed -n 's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/\1/p'
如何才能仅打印与组中正则表达式匹配的行的一部分?
发布于 2013-07-07 19:22:11
匹配整行,因此在正则表达式的开头添加一个
.*
。这会导致整行被替换为组的内容
echo "foo bar <foo> bla 1 2 3.4" |
sed -n 's/.*\([0-9][0-9]*[\ \t][0-9.]*[ \t]*$\)/\1/p'
2 3.4
发布于 2013-07-07 19:51:57
对于另一种选择,我会选择awk!
echo "foo bar <foo> bla 1 2 3.4" | awk '{ print $(NF-1), $NF; }'
这将在空格上拆分输入(我在这里使用的是STDIN,但您的输入很容易是一个文件),然后打印出倒数第二个字段,然后打印出最后一个字段。
$NF
变量保存在空格上分解后找到的字段数。
这样做的好处是,最后两个字段之前的内容是否发生变化并不重要,只要您只想要最后两个字段,它就会继续工作。
发布于 2017-10-18 08:25:35
cut命令正是针对这种情况而设计的。它将在任何分隔符上“剪切”,然后您可以指定应该输出哪些块。
例如:
echo "foo bar <foo> bla 1 2 3.4" | cut -d " " -f 6-7
将产生以下输出:
2 3.4
-d设置分隔符
-f选择要输出的“字段”的范围,在本例中,它是原始字符串的第6到7个块。您还可以将范围指定为列表,例如
6,7
。
https://stackoverflow.com/questions/17511639
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287