첫 번째 밑줄로 시작하고 첫 번째 하이픈으로 끝나는 파일 이름을 추출합니다.

첫 번째 밑줄로 시작하고 첫 번째 하이픈으로 끝나는 파일 이름을 추출합니다.

디렉토리에 파일 목록이 있고 '_'첫 번째 밑줄 위치부터 시작하여 첫 번째 '-'.

예를 들어:

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그것에 저항하곤 했습니다.

관련 정보