在Linux Mint Terminal中使用cut更精确

时间:2017-08-30 14:28:41

标签: linux terminal

在Linux Mint的目录/ usr / lib中,有一些文件,其中包括xxx.so.d的名称,其中xxx是它们的名字,d是一个数字。分配是查找.so文件结尾的所有文件,并写出其名称xxx。我到目前为止的代码是

ls | grep "\.so\." | cut -d "." -f 1  

现在的问题是削减一些文件名很短,例如有一个名为libgimp-2.0.so.0的文件,其中想要的输出是libgimp-2.0,因为那部分是.so的前面 无论如何都要在#34; .so"而不是第一个。?

4 个答案:

答案 0 :(得分:1)

for i in *.so*; do echo "${i%.so*}"; done

只是一个bash参数替换 http://www.tldp.org/LDP/abs/html/parameter-substitution.html

答案 1 :(得分:1)

pacholik给出的答案可能会给你错误的文件(即:'xyz.socket'会出现在你的列表中)。纠正他的剧本:

for i in *.so.*; do echo "${i%%.so*}"; done

另一种方法(在我看来更容易阅读)是使用一点Perl:

 ls | grep "\.so\." | perl -n0e "print ((split(/\.so/))[0], \"\n\")"

对不起,我认为没有办法像你问的那样只使用“剪切”。

答案 2 :(得分:0)

请改用sed:

ls | grep -v ".socket" | grep .so | sed "s/.so.*//"

这将删除文件名中第一个找到的.so后面的所有内容。所以名为xxx.so.so的文件也可以使用。

答案 3 :(得分:0)

取决于目录的大小,可能使用find可能是最好的选择,作为起点试一试:

find . -iname "*.so.*" -exec basename {} \;  | cut -d "." -f 1

cut一样,还有许多其他选项,例如sedawk可以帮助您在某些情况下以更快的方式获得相同的结果。