我正在创建一个小脚本,我必须列出我所有的Tomcat二进制文件。
到目前为止,我能够做到这一点:
ls -1 | grep '\-tomcat\-' | cut -f3 -d'-'
这基本上列出了所有版本,但它添加了.zip或.tar.gz
5.5.17.zip
5.5.26.tar.gz
5.5.27.tar.gz
5.5.28.tar.gz
5.5.31.tar.gz
5.5.32.tar.gz
我想知道如何从提取的字符串中删除.zip和.tar.gz。
答案 0 :(得分:6)
或简化整个方法:
ls apache-tomcat*|sed -r 's/^.*-([0-9.]+)\..*/\1/'
更少的工具,它为您提供版本号。
P.S。:跟进@ Nemo的建议:我们让shell globbing和先前的知识处理一半的工作(只列出实际上看起来像apache-tomcat的东西)。将ls'输出到另一个工具时,-1是没有实际意义的,所以我们摆脱了它。 sed获取来自ls的值,匹配行的开头到第一个 - 后跟一个数字,括号记住所有数字&文字句点,然后我们匹配字符串的其余部分直到行尾(隐式)。然后整个比赛被记住的数字&周期。
答案 1 :(得分:5)
将其传递给另一个cut
:
ls -1 | grep '-tomcat-' | cut -f3 -d'-' | cut -f1-3 -d'.'
只要版本都有三个组件,这将有效。如果版本只是5.5,它将无法正常工作。
另一种选择就是使用sed
:
ls -1 | grep '-tomcat-' | cut -f3 -d'-' | sed 's/.tar.gz\|.zip//'
这会从字符串中删除.tar.gz
或.zip
。
答案 2 :(得分:1)
ls -1 | awk -F. '/-tomcat-/ {print $1}'
使用awk的解决方案。以前的所有答案都会起作用。
编辑:
我可能误解了,也许这就是你所追求的:
ls -1 | awk -F\- '/tomcat/ {print substr($3,0,6)}'