Linux 特定格式的浮点数的Bash问题

Linux 特定格式的浮点数的Bash问题,linux,awk,grep,Linux,Awk,Grep,(bash-linux中需要)我有一个这样的文件 1.415949602 91.09582241 91.12042924 91.40270349 91.45625033 91.70150341 91.70174342 91.70660043 91.70966213 91.72597066 91.7287678315 91.7398645966 91.7542977976 91.7678146465 91.77196659 91.77299733 abcdefghij 91.7827827 91.

(bash-linux中需要)我有一个这样的文件

1.415949602
91.09582241
91.12042924
91.40270349
91.45625033
91.70150341
91.70174342
91.70660043
91.70966213
91.72597066
91.7287678315
91.7398645966
91.7542977976
91.7678146465
91.77196659
91.77299733
abcdefghij
91.7827827
91.78288651
91.7838959
91.7855
91.79080605
91.80103075
91.8050505

sed 's/^91\.//' file (working) 
有没有可能我能做到这三个步骤

我先试试这个

cat input | tr -d 91. > 1.txt (didnt work) 
cat input | tr -d "91." > 1.txt (didnt work) 
cat input | tr -d '91.' > 1.txt (didnt work) 
然后

然后

最终单线解决方案

cat input.txt | sed 's/\91.//g' | grep -x '.\{10\}'  | grep "^[6-9]" > output.txt
您的“最终”解决方案:

cat input.txt |
sed 's/\91.//g' |
grep -x '.\{10\}' |
grep "^[6-9]" > output.txt
应避免,并将
sed
脚本中的反斜杠移到正确的位置(我添加了
^
锚定,并删除了
g
标志,因为您不希望一行中出现多个匹配)

您可能还可以摆脱至少一个,但在这一点上,我将切换到Awk:

awk '{ sub(/^91\./, "") } /^[6-9].{9}$/' input.txt >output.txt
sub();最后一个条件是打印与正则表达式匹配的行

同样的内容可以方便地(但可读性较差)写入
sed

sed -n 's/^91\.([6-9][0-9]\{9\}\)$/\1/p' input.txt >output.txt

假设您的
sed
方言支持BRE regex,重复类似
[0-9]\{9\}

您编写了哪些代码来解决这个问题,以及您到底在哪里面临问题?因此,我们鼓励用户增加他们为解决自己的问题所付出的努力,所以请添加SO并让我们知道。请注意,这些数字都没有长度10,除非您将前导的
91.
替换为
0.
而不是删除
91
。(在这种情况下,它们都不会以6、7、8或9开头。)@RavinderSingh13请刷新
tr-D91。
将从输入中删除所有
9
s、
1
s和
s,无论它们出现在何处。它不会删除特定字符串
91.
sed 's/^91\.//' input.txt |
grep -x '.\{10\}' |
grep "^[6-9]" > output.txt
awk '{ sub(/^91\./, "") } /^[6-9].{9}$/' input.txt >output.txt
sed -n 's/^91\.([6-9][0-9]\{9\}\)$/\1/p' input.txt >output.txt