+ -
当前位置:首页 → 问答吧 → grep regexp 问题

grep regexp 问题

时间:2009-01-13

来源:互联网

用equery查package后:
代码:
$ equery l scim
[ Searching for package 'scim' in all categories among: ]
 * installed packages
[I--] [ ~] app-i18n/scim-1.4.7-r2 (0)
[I--] [ ~] app-i18n/scim-bridge-0.4.15-r3 (0)
[I--] [ ] app-i18n/scim-input-pad-0.1.1 (0)
[I--] [ ] app-i18n/scim-pinyin-0.5.91-r2 (0)
[I--] [ ~] app-i18n/scim-python-0.1.13_rc1-r1 (0)
[I--] [ ] app-i18n/scim-tables-0.5.8-r1 (0)
[I--] [ ~] app-i18n/scim-xingma-0.1.10.1-r2 (0)
想用grep来读取中间package名字。
代码:
$ equery l scim | grep [[:alnum:]-]?\/
这个指令结果是空的。

然后这个直接有错误:
代码:
$ equery l scim | grep [[:alnum:]-]*\/
close failed in file object destructor:
Error in sys.excepthook:

Original exception was:
为什么?

作者: mathfeel   发布时间: 2009-01-13

在 grep 和 regexp间加上 -E的参数,指明用perl的正则表达式。

作者: acevery   发布时间: 2009-01-13

这不是perl regexp的问题。因为man grep下说可以用[:alnum:]之类。

自己解决了,原来要加单引号。不過还有奇怪的地方:
代码:
$ equery l scim | grep -o '[[:alnum:]-]*\/[[:alnum:]\.\_-]*'
app-i18n/scim-1.4.7-r2
app-i18n/scim-bridge-0.4.15-r3
app-i18n/scim-input-pad-0.1.1
app-i18n/scim-pinyin-0.5.91-r2
app-i18n/scim-python-0.1.13_rc1-r1
app-i18n/scim-tables-0.5.8-r1
成功!match每一行整行。然而
代码:
$ $ equery l scim | grep '[[:alnum:]-]*\/[[:alnum:]-\.\_]*'
grep: Invalid range end
close failed in file object destructor:
Error in sys.excepthook:

Original exception was:
失败!好,我的理解是'-'一定要放在最后一位。不然会被以为是要表达领域。或许要加'\'把,但是:
代码:
$ equery l scim | grep -o '[[:alnum:]\-]*\/[[:alnum:]\-\.\_]*'
app-i18n/scim
app-i18n/scim
app-i18n/scim
app-i18n/scim
app-i18n/scim
app-i18n/scim
第一个'\-'成功match到'app-i18n'内的'-',但第二个确没有match到'scim'以后的'-'

可能还是要放最后吧。的确:
代码:
$ equery l scim | grep -o '[[:alnum:]\-]*\/[[:alnum:]\.\_\-]*'
app-i18n/scim-1.4.7-r2
app-i18n/scim-bridge-0.4.15-r3
app-i18n/scim-input-pad-0.1.1
app-i18n/scim-pinyin-0.5.91-r2
app-i18n/scim-python-0.1.13_rc1-r1
app-i18n/scim-tables-0.5.8-r1
结论:
  1. 要用单引号
  2. 无论是'-'或'\-'都要放最后。

作者: mathfeel   发布时间: 2009-01-13

你这个问题,用这个办法是不是更漂亮一点

引用:
% qlist -Iv xfce4
dev-util/xfce4-dev-tools-4.4.0.1
x11-themes/xfce4-icon-theme-4.4.3
xfce-base/libxfce4mcs-4.4.3
xfce-base/libxfce4util-4.4.3
xfce-base/xfce4-4.4.3
xfce-base/xfce4-panel-4.4.3
xfce-base/xfce4-session-4.4.3
xfce-extra/xfce4-appfinder-4.4.3
xfce-extra/xfce4-battery-0.5.1
xfce-extra/xfce4-clipman-0.8.1
xfce-extra/xfce4-mixer-4.4.3
xfce-extra/xfce4-mount-0.5.5
没明白你的具体要求是什么,似乎是这个,请指教

作者: gogonkt   发布时间: 2009-01-14

在完成文字过滤这件任务上,用sed好像比用grep更常规点吧。

作者: 没本   发布时间: 2009-01-14