当我使用这个命令时:
ls /var/log/packages/*SBo|cut -d / -f 5它返回以下内容:
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我希望删除从数字字段开始的所有内容(其余的行应该省略)。所以我想让它看起来像:
webcore-fonts
winetricks
wireshark
wxGTK怎么做?我认为awk是完美的,但我不知道如何删除其余的行(但只有在数字的情况下)。
发布于 2014-10-28 23:09:47
你可以试试:
ls /var/log/packages/*SBo| sed 's/-[0-9].*//'发布于 2014-10-28 22:44:19
使用sed很容易做到这一点:
$ 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]来确保它在所有地区和扩展字符集中都能工作。在上,尝试:
ls /var/log/packages/*SBo | sed -E -e 's|.*/||' -e 's/-[[:digit:]][[:digit:].]*-.*//'发布于 2014-10-29 00:08:33
如果您的文件可以以空格的形式在名称中包含花哨的字符,或者您不喜欢解析ls命令的想法,那么您可以使用find:
find /var/log/packages -maxdepth 1 -name '*SBo' -exec sh -c 'sed s,.*/,,\;s/-[[:digit:]].*//<<<"$0"' {} \;https://unix.stackexchange.com/questions/164697
复制相似问题