我在一个名为的文件中包含此文本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