我正在创建一个小脚本,我必须列出我所有的 Tomcat 二进制文件。
到目前为止,我能够做到这一点:
ls -1 | grep '\-tomcat\-' |剪切-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。
最佳答案
或者简化整个方法:
ls apache-tomcat*|sed -r 's/^.*-([0-9.]+)\..*/\1/'
更少的工具,它会为您提供版本号。
P.S.:跟进@Nemo 的建议:我们让 shell 通配符和先验知识完成一半的工作(只列出实际上看起来像 apache-tomcat 的东西)。当将 ls 的输出通过管道传输到另一个工具时,-1 没有实际意义,因此我们摆脱了它。 sed 接受来自 ls 的值,将行首与第一行匹配 - 后跟一个数字,括号记住所有数字和文字句点,然后我们匹配字符串的其余部分直到行尾(隐式)。然后整个匹配被替换为记住的数字和句点。
关于linux - 从 ls 中提取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15939226/