首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在数值情况下才删除Awk字段

只在数值情况下才删除Awk字段
EN

Unix & Linux用户
提问于 2014-10-28 22:32:25
回答 3查看 618关注 0票数 3

当我使用这个命令时:

代码语言:javascript
复制
ls /var/log/packages/*SBo|cut -d / -f 5

它返回以下内容:

代码语言:javascript
复制
webcore-fonts-3.0-noarch-3_SBo
winetricks-20120923-noarch-1_SBo
wireshark-1.12.1-x86_64-1_SBo
wxGTK-2.8.12-x86_64-3_SBo

我希望删除从数字字段开始的所有内容(其余的行应该省略)。所以我想让它看起来像:

代码语言:javascript
复制
webcore-fonts
winetricks
wireshark
wxGTK

怎么做?我认为awk是完美的,但我不知道如何删除其余的行(但只有在数字的情况下)。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2014-10-28 23:09:47

你可以试试:

代码语言:javascript
复制
ls /var/log/packages/*SBo| sed 's/-[0-9].*//'
票数 3
EN

Unix & Linux用户

发布于 2014-10-28 22:44:19

使用sed很容易做到这一点:

代码语言:javascript
复制
$ ls /var/log/packages/*SBo | sed -r 's|.*/||; s/-[[:digit:]][[:digit:].]*-.*//'
webcore-fonts
winetricks
wireshark
wxGTK

解释:

  • -r支持扩展正则表达式,从而减少所需转义的数量。
  • s|.*/|| --这将删除文件名之前的目录。
  • s/-[[:digit:]][[:digit:].]*-.*//,这看起来是一个被破折号包围的数字,并移除它和后面的所有内容。regex使用[:digit:]而不是[0-9]来确保它在所有地区和扩展字符集中都能工作。

在上,尝试:

代码语言:javascript
复制
ls /var/log/packages/*SBo | sed -E -e 's|.*/||' -e 's/-[[:digit:]][[:digit:].]*-.*//'
票数 2
EN

Unix & Linux用户

发布于 2014-10-29 00:08:33

如果您的文件可以以空格的形式在名称中包含花哨的字符,或者您不喜欢解析ls命令的想法,那么您可以使用find

代码语言:javascript
复制
find /var/log/packages -maxdepth 1 -name '*SBo' -exec sh -c 'sed s,.*/,,\;s/-[[:digit:]].*//<<<"$0"' {} \;
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/164697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档