다음과 같은 파일에 이 텍스트가 있습니다 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
마지막 5개 행이 제거됩니다.
나는 running 을 실행하면 egrep -v '->' temp
이후 동일한 5개 행을 제거 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