텍스트 파일에 파일 목록이 있다고 가정해 보겠습니다.
...
/foo/barfoo
/bar/foo/foobar
/foobar/bar/foo
...
이 텍스트 파일을 검색하는 스크립트가 있는데, 찾기 명령과 마찬가지로 파일의 기본 이름을 검색할 수 있기를 원합니다. 지금까지 나는 이 grep 명령을 사용해 왔으며 grep -E */.*${1}[^/]*$
정규 표현식을 grep하려는 경우를 제외하고는 잘 작동합니다. 따라서 위의 예에서 "foo"로 시작하는 파일을 찾으려면 그렇게 하겠지만 myscript --basename ^foo
전체 정규식은 grep -E */.*^foo[^/]*$
분명히 실패하기 때문에 실패할 것입니다. xargs를 사용하여 각 항목을 기본 이름에 삽입하는 것을 고려했지만 마지막에 전체 파일 경로를 출력하려면 스크립트가 필요합니다.
어떤 아이디어가 있나요? 나는 POSIX 준수를 선호하지만 GNUisms도 좋습니다.
답변1
foo
기본 이름의 시작 부분에서 일치해야 하는 경우 :
< inputfile grep '/foo[^/]*$'
/foo[^/]*$
: 문자열 뒤에 문자열 끝이 아닌/foo
임의 개수의 문자가 오는 문자열 과 일치합니다./
if는 foo
기본 이름의 어느 위치에서나 일치할 수 있습니다.
< inputfile grep 'foo[^/]*$'
foo[^/]*$
: 문자열 뒤에 문자열 끝이 아닌foo
임의 개수의 문자가 오는 문자열 과 일치합니다./
답변2
grep
PCRE(Perl 호환 정규 표현식)를 지원하는 경우 :
$ grep -Po '.*/\Kfoo[^/]*$' file.txt
foobar
foo
.*/
마지막 항목과 일치/
하고\K
일치 항목을 삭제합니다.foo[^/]*$
다음으로 시작하는 파일 이름을 찾습니다.foo