다음 샘플 콘텐츠가 포함된 파일이 있습니다.
NOF 하락 수준 = 96 데이터 = 2018년 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 2018 수요일 1월 3일 04 :37:32: 7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018: 7E 2018년 1월 3일 수요일 04:37:32: 7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 1월 3일 수요일 04:37:32 2018:7E 1월 수 3 04:37:32 2018:
nof_received_data_packets
파일에서 날짜와 시간을 제거하고 싶습니다. 즉, "2018년 1월 3일 수요일:XX:XX:XX"의 모든 인스턴스를 삭제하고 싶습니다. 따라서 should가 n
나타날 때 마다 Wed
문자가 제거 될 수 있습니다 .
어떻게 구현하나요 sed
?
답변1
패턴을 일치시키세요.
$ sed 's/Wed Jan 3 ..:..:.. 2018://g' FILE
NOF DOWN BITS = 96 data = 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E
nof_received_data_packets
아마도 더 복잡한 작성 방법이 있을 수 있지만 작동합니다.
답변2
그리고앗:
awk -v RS='[[:alpha:]]{3} [[:alpha:]]{3} [0-9]{1,2} ([0-9]{2}:?){3} [0-9]{4}:' \
-v ORS='' '{print}' datafile
NOF DOWN BITS = 96 data = 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E 7E
nof_received_data_packets
이는 레코드 구분 기호(RS)를 날짜 및 시간 뒤에 날짜 및 시간이 오는 문자열과 일치하는 정규식으로 설정하고 :
출력 레코드 구분 기호(ORS)를 빈 것으로 설정함으로써 수행됩니다.
그런 다음 각 "레코드"를 인쇄합니다.
짧은 월 이름과 짧은 요일 이름이 항상 세 글자이고 날짜 형식이 항상 이라고 가정하면 모든 날짜 및 시간에서 작동합니다 Day Month Daynum HH:MM:SS YYYY
.
그리고 sed:
sed -E 's/[[:alpha:]]{3} [[:alpha:]]{3} [0-9]{1,2} ([0-9]{2}:?){3} [0-9]{4}://g' \
datafile
이는 정규식과 동일한 날짜 일치를 사용하여 날짜 뒤에 시간이 오는 것처럼 보이는 모든 항목을 제거합니다 :
.
그리고진주:
perl -p -e 's/\w{3} \w{3} \d{1,2} (\d{2}:?){3} \d{4}://g' datafile
Perl 정규식에는 "단어" 문자( \w
) 및 숫자( \d
)를 지정하는 몇 가지 멋진 단축키가 있습니다. Perl 버전은 유니코드를 지원하며 모든 로케일에서 작동합니다.
세 스크립트 모두 꽤 폭력적인 스크립트입니다. 날짜 형식이 위의 형식과 다를 수 없다면 그보다 더 이국적인 것을 시도할 가치가 없다고 생각합니다. 그렇다면 Perl로 무언가를 작성하여 해당 Date::Parse
모듈을 사용하여 각 줄에서 하위 문자열을 검색할 수 있습니다.
sed
버전에는 GNU 및 GNU awk
가 필요 하거나 최소한 정규식 반복 계산을 이해하는 버전이 필요합니다 .sed
awk
{n,m}