如何让 grep 使用“->”作为模式?

如何让 grep 使用“->”作为模式?

我在一个名为的文件中包含此文本temp

-rw-r--r-- 1 root root  15776 Oct 15  2010 dnd-copy
-rw-r--r-- 1 root root  15776 Oct 15  2010 dnd-link
-rw-r--r-- 1 root root  15776 Oct 15  2010 dnd-move
-rw-r--r-- 1 root root  15776 Oct 15  2010 dnd-none
-rw-r--r-- 1 root root  15776 Oct 15  2010 dotbox
lrwxrwxrwx 1 root root      5 Oct  8  2012 cross_reverse -> cross
lrwxrwxrwx 1 root root      5 Oct  8  2012 diamond_cross -> cross
lrwxrwxrwx 1 root root      6 Oct  8  2012 dot_box_mask -> dotbox
lrwxrwxrwx 1 root root     17 Oct  8  2012 double_arrow -> sb_v_double_arrow
lrwxrwxrwx 1 root root      9 Oct  8  2012 draft_large -> right_ptr

如果我运行egrep -v 'lrwx' temp,最后五行将被消除。

我预计运行egrep -v '->' temp, 会消除相同的五行,因为lrwx->出现在同一行上。

但是,我收到此错误:

[09:43 PM] ~/Desktop $ egrep -v '->' temp
egrep: invalid option -- '>'
Usage: egrep [OPTION]... PATTERN [FILE]...
Try 'egrep --help' for more information.

尝试egrep -v '-\>' temp也无济于事:

[09:46 PM] ~/Desktop $ egrep -v '-\>' temp
egrep: invalid option -- '\'
Usage: egrep [OPTION]... PATTERN [FILE]...
Try 'egrep --help' for more information.

egrep(我使用或得到相同的结果grep -E。)

答案1

->被解释为一个选项,grep由于前导-.您可以使用两种方法:

grep -- '->' # Explicitly declare end of arguments using --
grep '\->'   # Escape -, which still evaluates to -.

根据记录,解析 ls 是查找符号链接的一种不好的方法,它很容易导致误报或损坏的数据,特别是如果您要尝试进一步解析它。像这样的东西会更好(在 bash 中):

shopt -s nullglob
for file in *; do
    [[ -h $file ]] || continue
    printf '%s -> %s\n' "$file" "$(readlink "$file")"
done

相关内容