첫 번째 문자로 grep할 수 없습니다.

첫 번째 문자로 grep할 수 없습니다.

모든 파일을 나열하고 그 중에서 특정 파일만 선택하려고 합니다. ls -1목록 돌려줘

abc 
abcd
rm_0818-051752-753-06

이후에는 이 기준 선택으로 세 번째 행만 반환하려고 하므로 다음과 같이 합니다.

ls -1 | grep -E "^rm_.*"

하지만 나는 아무것도 얻지 못했습니다.

이 방법으로 세 번째 줄의 첫 번째 문자를 식별하려고 합니다.

var=$(ls -1 | grep -E "rm_")
echo $var //returns rm_0818-051752-753-06
echo ${var:0:1} //returns some strange symbol 001B in square

이 동작을 설명할 수 있고 첫 번째 문자를 어떻게 잡을 수 있나요 ^? 감사해요

답변1

ls -1 | grep -E "^rm_.*"좋아 보이고 작동해야합니다. 작동하지 않는 가능한 이유는 별칭이 ls구성 파일의 명령에 바인딩되어 있기 때문입니다.
확인하려면 다음을 시도해 보세요. /bin/ls -1 | grep -E "^rm_.*"

답변2

grep별칭이나 이와 유사한 것을 사용한 것 같습니다 grep --color=always. 를 실행하여 이를 확인할 수 있습니다 type grep. 비슷한 동작을 재현할 수 있습니다.

$ var=$(ls -1 | grep --color=always "^rm")
$ echo ${var:0:1}
## Weird boxed character appears here

무슨 일이 일어나고 있는지 더 잘 이해하기 위해 $var다음을 수행 할 수 있습니다 od.

$ echo "$var" | od -c
0000000 033   [   0   1   ;   3   1   m 033   [   K   r   m 033   [   m
0000020 033   [   K   _   0   8   1   8   -   0   5   1   7   5   2   -
0000040   7   5   3   -   0   6  \n
0000047

033 [ 0 1 ; 3 1 m 033 [ KANSI 색상 탈출, 여기서 문제가 됩니다. 다음의 앨리어싱되지 않은 버전을 사용하면 이를 방지할 수 있습니다 grep.

/bin/grep '^rm_'

또는

\grep '^rm_'

ls더 나은 방법은 일반적으로 다음과 같은 결과가 나오므로 구문 분석하지 않는 것입니다 .다른 문제. 원하는 작업을 수행하는 더 안전하고 간단한 방법은 다음과 같습니다.

$ var="rm*"
$ echo $var
rm_0818-051752-753-06
$ echo ${var:0:1}
r

답변3

grep이 필요한 이유는 다음과 같습니다.

ls -1 rm_*

관련 정보