PWD=sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
.
두 가지를 정의해야 해요____
작동하지 않는 일반 구문을 사용하려고 하면 4개의 구분 기호 [.____]
로 처리됩니다 ( 와 동일 ____
하므로 ).____
_
예:
basename $PWD
sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat
basename $PWD|awk -F[."____"] '{print $4}'
090951
보상을 받기 위해 열심히 노력하고 있어요 d_0327
. 내가 원하는 방식으로 작동하지 않는 이유를 이해하고 작동하도록 하는 올바른 구문을 찾고 있습니다.
답변1
[<set>]
성냥하나문자(다음으로 확장됨요소 구성일부 도구를 사용하고 경우에 따라 제공된 것에서)<set>
.
[.____]
특별한 경기하나문자(단 .
, _
또는 , 또는 _
, 또는 _
) 입니다 _
. 말할 필요도 없이 [.____]
똑같습니다 [._]
.
두 문자열 중 하나를 일치시키려면 |
대체 연산자가 필요합니다.
awk -F '\\.|____' '{print $4}'
최신(및 표준)을 사용하여 awk
다음과 같이 작성할 수도 있습니다.
awk -F '\\.|_{4}' '{print $4}'
또한 [...]
쉘은 [...]
쉘 와일드카드이기도 하므로 따옴표로 묶어야 합니다. 귀하의 경우에는 ____
쉘 부분만 인용했습니다. _
이것은 쉘에 특별한 것이 아니기 때문에 필요하지 않습니다 . 즉 , 현재 디렉토리에 or 라는 -F[."____"]
파일이 있는 경우 쉘 와일드카드는 에 전달되기 전에 해당 파일로 확장됩니다 . 그렇지 않은 경우 에 전달됩니다 (일부 쉘에서는 일치하지 않는 glob 대신 오류를 보고하지만).-F.
-F_
-F[."____"]
awk
-F[.____]
awk