我使用grep来获取这样的字符串:ANS_LENGTH=266.50
然后我使用sed来获取数字:266.50
这是我的完整命令:grep --text 'ANS_LENGTH=' log.txt | sed -e 's/[^[[:digit:]]]*//g'
结果是:26650
如何更改此行,以便结果仍显示分隔符:266.50
答案 0 :(得分:2)
如果您要使用grep
,则不需要sed
。只需使用sed'
//
来匹配您需要打印的行。
sed -n '/ANS_LENGTH/s/[^=]*=\(.*\)/\1/p' log.txt
-n
将禁止打印与/ANS_LENGTH/
=
符号旁边的值。 p
标记允许打印与//
匹配的行。 如果您的grep
恰好支持-P
选项,则可以执行以下操作:
grep -oP '(?<=ANS_LENGTH=).*' log.txt
(?<=...)
是一个后视构造,允许我们匹配您需要的线条。这需要-P
选项-o
允许我们只打印值部分。 答案 1 :(得分:1)
您需要匹配文字点和数字。
尝试sed -e 's/[^[[:digit:]\.]]*//g'
点将匹配任何单个字符。使用反斜杠转义它只会匹配一个文字点。
答案 2 :(得分:0)
以下是一些awk
示例:
cat file:
some data ANS_LENGTH=266.50 other=22
not mye data=43
gnu awk
(由于RS)
awk '/ANS_LENGTH/ {f=NR} f&&NR-1==f' RS="[ =]" file
266.50
awk '/ANS_LENGTH/ {getline;print}' RS="[ =]" file
266.50
普通awk
awk -F"[ =]" '{for(i=1;i<=NF;i++) if ($i=="ANS_LENGTH") print $(i+1)}' file
266.50
awk '{for(i=1;i<=NF;i++) if ($i~"ANS_LENGTH") {split($i,a,"=");print a[2]}}' file
266.50