텍스트 파일에서 날짜(년, 월, 일)와 시간(시, 분)을 추출하여 나중에 변수로 사용해야 합니다. 숙제가 아니라, 내 직업에 유용한 일을 하려고 노력하는 것뿐입니다. 저는 리눅스를 처음 접했습니다.
입력: 다음 이름의 파일 목록이 포함된 텍스트 파일:
S3G_MX_1_EFR____20100203T121015_othernumbers.zip
원하는 출력은 다음과 같습니다.
2010 02 03 12 10
연도, 월, 일, 시, 분 등 여러 변수에 개별적으로 넣고 싶습니다. grep을 사용해야 하나요? 아니면 sed? 아니면 어? 많이 읽으세요. 하지만 가능성이 너무 많아서 스트레스를 받습니다. S3G_MX_1_EFR____
"연도"라는 문자열 뒤에 "숫자 4개" 같은 표현을 쓸 수 있나요 ? 전체 코드가 필요하지 않으며 사용할 옵션/명령이나 시작 위치에 대한 몇 가지 제안만 있으면 됩니다.
답변1
GNU grep 및 bash 사용:
filename="S3G_MX_1_EFR____20100203T121015_othernumbers.zip"
timestamp=$( echo "$filename" | grep -oP '(?<=\D)\d{8}T\d{4}' )
그 다음에
year=${timestamp:0:4}; echo $year # => 2010
month=${timestamp:4:2}; echo $month # => 02
day=${timestamp:6:2}; echo $day # => 03
hour=${timestamp:9:2}; echo $hour # => 12
minute=${timestamp:11:2}; echo $minute # => 10
실제로 일반 bash가 가능합니다(버전 4+ 필요).
regex='_([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})'
if [[ $filename =~ $regex ]]; then
year=${BASH_REMATCH[1]}
month=${BASH_REMATCH[2]}
day=${BASH_REMATCH[3]}
hour=${BASH_REMATCH[4]}
minute=${BASH_REMATCH[5]}
echo "$year $month $day $hour $minute"
fi
2010 02 03 12 10
답변2
교체를 해보시는 건 어떨까요?
sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/'
(확장 정규 표현식 구문) 과 같은 패턴은 (....)
패턴 뒤의 4자리 숫자와 일치하며 \1
대체 시 as 및 다음을 사용할 수 있습니다. 따라서 귀하의 예의 결과는 다음과 같습니다
export year=2010 month=02 day=03 hour=12 minute=10
이 줄은 다음과 같이 실행될 수 있습니다
$(echo S3G_MX_1_EFR____20100203T121015_othernumbers.zip | sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/')