在unix中查找和删除(更新)

以下是我的input文件:

sample.txt

 3" 6-position 7' 4" to 10' 3-1/2" 4.8" Adjustable from 99" to 111" - max 148 

而在输出中我只需要3个,即

output.txt

 3 4.8 

所以基本上我需要打印"符号的数字值,其他非数字文本需要完全删除。

我试图用sed来实现这个,但是我无法得到想要的结果。

有没有办法在UNIX上实现这一点?

Solutions Collecting From Web of "在unix中查找和删除(更新)"

awk更适合执行这种类型的任务:

 awk '/^ *[0-9]*(\.[0-9]+)?" *$/{sub(/"/, ""); print}' inFile 

OUTPUT:

 3 4.8 

sed的一种方法:

 sed -n 's/^\([0-9]\+\(\.[0-9]\+\)\?\)"$/\1/p' sample.txt > out.txt 

或与GNU sed

 sed -rn 's/^([0-9]+(\.[0-9]+)?)"$/\1/p' sample.txt > out.txt 

或与GNU grep

 grep -oP '^[0-9]+(\.[0-9]+)?(?="$)' > out.txt 

请务必使用正确的英寸标记( " ),或者您可以将两者与字符类[”"]匹配。

编辑:更新为浮点数的工作。

我想你是要求grep -o [0-9][0-9]*\" sample.txt将匹配一个或多个数字跟在我的一个'”',并分别打印每个事件,没有周围的文本。

这可能适用于你(GNU sed):

 sed '/^[0-9.]\+"/!d;s/".*//' file