정규식 [\\\/][^\\\/]*$는 어떻게 작동하나요?

정규식 [\\\/][^\\\/]*$는 어떻게 작동하나요?

나는 몇 가지 유용한 정규식 주석을 가지고 있는데, 내가 자주 사용하는 주석은 다음과 같습니다.

echo '/home/user/folder/file.txt' | sed -E 's/[\\\/][^\\\/]*$//g'

이 정규식에서 얻은 결과는 상위 폴더의 경로입니다 /home/user/folder. 정규식의 기본 사항을 이해합니다.

\s          # all white space
\S          # no white space
.           # all chars       
\.          # period
+           # sequence of once or more
{5}         # sequence of delimited interval 
*           # sequence of zero or more
?           # sequence of once or none
[0-9]       # any sequence of number
[a-z]       # any sequence of letter 
[^x-y]      # no sequence of letter 
^           # beginning
$           # ending

그러나 나는 정규식에서 중화의 의미가 무엇인지 내 예에서 파악하지 못했습니다 [\\\/]. [^\\\/]어떻게 작동하나요?

답변1

[\\\/]이스케이프 문자 \와 이스케이프 문자가 포함되어 있습니다 /(여기서는 문자를 이스케이프할 필요가 없습니다). [abc]일치 a또는 b또는 c, [\\\/]일치 \또는 과 같습니다 /.

[^\\\/]다소 유사하지만 ^처음에 특별한 반전이 있습니다 []. 즉, 의미를 부정합니다. [^\\\/]임의의 문자와 일치다른또는 .\/

[\\\/][^\\\/]*$\또는 와 일치하고 /줄 끝까지 0개 이상의 다른 문자와 일치합니다. 귀하의 s명령은 일치하는 문자열을 아무것도 바꾸지 않습니다. 전체 sed 명령은 마지막 항목 \이나 마지막 항목 /(둘 중 나중에 있는 항목)과 그 이후의 모든 항목을 삭제합니다.

노트:

  • -E이 특정 명령은 작동할 필요가 없습니다.
  • g필요하지 않습니다(한 줄에서 두 줄 이상의 끝을 찾을 수 없습니다).
  • (이미 지적함) /안으로 탈출할 필요는 없습니다. [](외부 이스케이프는 /일반적으로 필요하지 않습니다. 사람들이 특별히 에서 구분 기호로 선택하기 때문에 일반적으로 필요하지만 예를 들어 다른 문자일 수도 있습니다.)[]/s/…/…/s|…|…|
  • /귀하의 명령은 Unix 경로 이름(comments 로 구분됨 )과 DOS/Windows 경로 이름(comments 로 구분됨 ) 모두에서 \마지막 구성 요소를 제거한다는 점에서 "범용"인 것으로 보입니다 . 하지만…
  • \Unix 경로 이름에 나타날 수 있습니다. 그렇다면 sed 명령으로 인해 예상치 못한 결과가 나타날 수 있습니다. 줄 바꿈도 허용됩니다.
  • /유효한 경로 이름이고상위 디렉토리는 다음과 같습니다./. 그러나 sed 명령은 빈 문자열을 생성합니다.
  • dir디렉토리인 경우에는 /path/to/dir/동일 /path/to/dir하지만 sed 명령은 /path/to/dir각각 /path/to.

관련 정보