디렉토리에 파일 목록이 있고 '_'
첫 번째 밑줄 위치부터 시작하여 첫 번째 '-'
.
예를 들어:
2180_PP AAA Radius Statistic-42005_04May2020_0900-04May2020_1000.csv
2180_SW Interface Flow(3GPP AAA)-53448_14May2020_0000-14May2020_0100.csv
예상되는 파일 이름은 다음과 같습니다.
PP AAA Radius Statistic
SW Interface Flow(3GPP AAA)
비슷한 패턴을 찾았지만 내 경우에는 제대로 작동하지 않았습니다.
echo 2180_SW Interface Flow(3GPP AAA)-53448_14May2020_0000-14May2020_0100.csv | grep -oP '(?<=_)\d+(?=\-)'
답변1
man grep
설명하다
grep searches for PATTERNS in each FILE. PATTERNS is one or patterns separated by newline characters, and grep prints each line that matches a pattern.
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
-P, --perl-regexp
Interpret PATTERNS as Perl-compatible regular expressions
(PCREs). This option is experimental when combined with the -z
(--null-data) option, and grep -P may warn of unimplemented features.
내가 ls
가지고 있는
'2180_PP AAA Radius Statistic-42005_04May2020_0900-04May2020_1000.csv'
'2180_SW Interface Flow(3GPP AAA)-53448_14May2020_0000-14May2020_0100.csv'
아래 코드를 실행하면
ls | grep -oP '(?<=_).*(?=\-\d\d\d)'
PP AAA Radius Statistic
SW Interface Flow(3GPP AAA)
설명REGEX
(?<= - Stands for a positive look-behind and will not include the words before it
. - Matches any characters except line break
(?= - Stands for positive look-ahead. Matches a group
after the main result without including it in the result.
\- - Matched character -
\d - Matched digit
REGEX 설명의 출처는 다음과 같습니다.정규식
왜 다른 결과가 나올 수 있나요?
-
입력(-14May)에 또 다른 일치 항목이 있습니까? 그래서 나는 \-\d\d\d
그것에 저항하곤 했습니다.