파일 이름에서 디렉터리 이름 가져오기

파일 이름에서 디렉터리 이름 가져오기

파일 이름의 일부를 추출하여 디렉터리 이름을 만들고 싶습니다. 여기 몇 가지 예가 있어요.

  1. server.log.2016-03-20-1420160320
  2. server-2016-03-17-13-16-Restart.log20160317

저는 HP-UX를 사용하고 있습니다.

답변1

이를 달성하기 위해 awk를 사용할 수 있습니다.

1)

echo server.log.2016-03-20-14 | awk -F'[.]' '{print $3}' | awk -F'[-]' '{print $1$2$3}'

2)

echo server-2016-03-17-13-16-Restart.log | awk -F'[-]' '{print $2$3$4}'

답변2

sed를 사용하여 정규식 검사에 파일 이름을 전달할 수 있습니다.

echo server.log.2016-03-20-14 | sed 's/server\.log\.\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\1\2\3/g'

echo server-2016-03-17-13-16-Restart.log | sed 's/server-\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)-Restart.log/\1\2\3/g'

예를 들어 더 엄격한 정규식이 필요한 경우 정규식을 사용하여 월을 설명할 수 있습니다.

0[0-9]\|1[12]

그날은

0[1-9]\|[12][0-9]\|3[01]

답변3

쉘의 문자열 조작 구성을 사용하여 이를 수행할 수 있습니다. 이를 위해서는 POSIX 셸이 필요하므로 이전 버전의 HP-UX를 실행하는 경우 Bourne 셸 대신 POSIX 셸(예: ksh)을 호출해야 할 수도 있습니다.

날짜를 구문 분석하는 방법을 완전히 지정하지 않았습니다. ????-??-????숫자의 첫 번째 발생이 원하는 날짜라고 가정합니다 .

p=${0#*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]}
s=${0#"$p"}; p=${0%"$p"}
p=${p#"${p%??????????}"}
year=${p%??????}; p=${p#?????}
month=${p%???}; day=${p#???}
echo "$year$month$day"

가장 읽기 쉬운 코드는 아니지만 작동합니다.

관련 정보