
모든 파일을 나열하고 그 중에서 특정 파일만 선택하려고 합니다.
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 [ K
예ANSI 색상 탈출, 여기서 문제가 됩니다. 다음의 앨리어싱되지 않은 버전을 사용하면 이를 방지할 수 있습니다 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_*