게임이 끝난 후 일부 캐릭터를 삭제하는 방법은 무엇입니까?

게임이 끝난 후 일부 캐릭터를 삭제하는 방법은 무엇입니까?

다음 샘플 콘텐츠가 포함된 파일이 있습니다.

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가 필요 하거나 최소한 정규식 반복 계산을 이해하는 버전이 필요합니다 .sedawk{n,m}

관련 정보