【问题标题】:Using cut in Linux Mint Terminal more precisely在 Linux Mint 终端中更精确地使用 cut
【发布时间】:2023-03-18 14:59:01
【问题描述】:

在 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 的前面 反正有没有在“.so”而不是第一个.?处进行切割?

【问题讨论】:

  • 除了cut还能用什么?
  • 我不知道,今天上了第一节课,真的没有经验
  • 我可以使用任何我想要的东西我相信,应该是高效的

标签: linux terminal


【解决方案1】:

pacholik 给出的答案可能会给您错误的文件(即:“xyz.socket”将出现在您的列表中)。更正他的脚本:

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

另一种方法(我认为更容易阅读)是使用一点 Perl:

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

对不起,我认为没有办法按照你的要求只使用“cut”。

【讨论】:

    【解决方案2】:
    for i in *.so*; do echo "${i%.so*}"; done
    

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

    【讨论】:

      【解决方案3】:

      只需使用 sed 代替:

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

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

      【讨论】:

      • 此解决方案将再次出现名为“xyz.socket”的文件。此解决方案更正为: ls | grep "\.so\." | sed "s/.so.*//"
      • 谢谢,没错。我更改了它并添加了排除项。用“\.so\.”它也可以工作并完美地回答问题,但排除的使用范围更广。
      【解决方案4】:

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

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

      与cut 一样,还有许多其他选项,例如sed、awk,可以帮助您在某些情况下以更快的方式实现相同的结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-04
        • 2020-10-10
        • 2015-03-23
        • 2015-12-05
        • 2022-12-30
        • 2015-11-11
        • 2018-10-29
        • 2022-01-21
        相关资源
        最近更新 更多