我有一个字符串: -
sometext sometext BASEDIR=/someword/someword/someword/1342.32 sometext sometext.
有人能告诉我,如何从linux中的上述字符串过滤这个数字1342.32
答案 0 :(得分:0)
如果某个文本总是通过空格与周围的字段分隔,请尝试使用
cat log.txt | awk '{for (i=1;i<=NF;i++) {if ($i ~
/BASEDIR/) {print i,$i}}}' | awk -F/ '{for (i=1;i<=NF;i++) {if ($i ~
/^[0-9][0-9]*$/) {print $i}}}'
上面的代码片段假设您的数据包含在名为log.txt
的文件中并按记录组织(请阅读此awk-wise)
答案 1 :(得分:0)
$ echo "sometext BASEDIR=/someword/1342.32 sometext." |
sed "s/[^0-9.]//g"
> 1342.32.
sed命令 s 可以搜索不在集合中的任何内容&#34; 0123456789&#34;或&#34;。&#34;,并将其替换为空(删除它)。它是在 g 小节模式中执行此操作,因此它不会在第一场比赛中停止。
如果您只想尝试阅读它,这就足够了。如果您尝试将号码输入另一个命令并需要一个实数,则需要清理它:
$ ... | cut -f 1-2 -d "."
> 1342.32
cut分割 d elemiter上的输入,然后选择 f ields 1和2(从1开始编号)。所以&#34; 1.2.3.4&#34;将返回&#34; 1.2&#34;。
答案 2 :(得分:0)
如果数字在sometext
之前显示在BASEDIR
以及输入中还有其他行,则此方法也有效:
sed -n 's,.*BASEDIR=\(/\w*\)*/\([0-9.]*\).*,\2,p'
-n
不输出没有BASEDIR…
\(/\w*\)*
/
和someword
组,重复\([0-9.]*\)
重复数字或小数点组\2
用第二组替换匹配的所有内容(整行)p
打印结果