scripts - 在文件中的字符串后面找到整数值

・3 分钟阅读

问题

我想从文件中得到一个特定字符串后的整数值,并对所有整数排序。 例如 - 我有一个包含数千行字符串权重的文件,


-weight 100


-weight 200


-weight 20



我想按排序顺序获取所有整数值。


回答1

尝试这个:


cut -d ' ' -f2 inputfile|sort -n



-d'' -将分隔符设置为空格
-f2 -获取第二列
sort -n -将结果排序为数字
测试结果:

 
20


100


200



 

回答2

请尝试以下命令:


sed -E 's/^.*weights([[:digit:]]*).*/1/' sort.txt | sort -n



或者


sed -E 's/.*weights([0-9]*).*/1/' sort.txt | sort -n



测试用例:


-weight 100 


-weight 200 


-weight 20



结果:

 
20


100 200



 

Note:-你没有给出一个好的测试用例所以,我假设。

信息:

  • ^.*weights([[:digit:]]) :读每一行,然后用下面的"空间"捕获单词"权重"后面的数字,
  • | sort -n :将输出输出到排序命令中,并且按数值排序,

回答3

如果你正在搜索最长的数字字符串,那么你可以使用grep


$ grep -oP 'd+s*$' file 


100


200


20



-o告诉grep只打印行的匹配部分,而-P则支持Perl兼容的正规表达式,PCRE让我们将d+用于"一个或多个数字",s*用于"0个或更多空白字符",所以,总之,该命令将打印在行尾找到的最长的数字。

如果需要排序,只需通过sort


$ grep -oP 'd+s*$' file | sort -n


20


100


200



如果你需要使用特定的字符串来锚定模式,请使用:


$ grep -oP -- '-weights+Kd+' file | sort -n


20


100


200



k告诉grep 不要包含与此点匹配的任何内容,因此上面的命令只会在-weight 和0或更多空格之后,打印最长的数字,

注意,如果你还要包含负数或小数,则需要:


grep -oP -- '-weights+K[0-9,-]+' file | sort -n



例如:


$ cat file 


-weight 100


-weight 200


-weight 20


-weight -29


-weight -32.4



$ grep -oP -- '-weights+K[0-9,-]+' file | sort -n


-32


-29


20


100


200




Tianye profile image