텍스트 파일의 문자열 일부를 반환합니다.

텍스트 파일의 문자열 일부를 반환합니다.

배경:

mysql 가져오기를 위해 모든 로그가 csv로 전송됩니다.

다음 데이터를 포함하는 로그가 많이 있습니다.

Moon,Srv-1,2016-04-04 06:59:48,Entry #103 (s) test (AlphaNum_Need_This_32_Char_Long1),Msg On (ref2357 : Act)
Moon,Srv-2,2016-03-04 06:59:48,Entry #2  SomeLongtest (AlphaNum_Need_This_32_Char_Long2),Msg On (ref2357 : Act)

질문:

  1. 추출 방법:

    AlphaNum_Need_This_32_Char_Long1
    AlphaNum_Need_This_32_Char_Long2
    

또는

  1. 부품을 폐기합니다 Entry #103 (s) test.

    => 문제는 이 텍스트의 길이와 문자가 alpha, num,( { } [ ] ( ) / \ . < ># @ _ -

현재 진행 상황:

  • sed다른 모든 필드를 사용하고 추출할 수 있습니다 awk.
  • Excel에서는 이렇게 하면 {텍스트가 D4인 경우} 문제가 해결됩니다.

    =MID(D4,SEARCH("),",D4)-32,32)
    

지금까지 저는 MS Logparser를 사용하여 문자열을 뒤집고 32자 수를 검색하는 등의 작업을 해왔습니다.

표적:Windows 로그 파서를 사용하지 말고 Linux에서 모두 수행하십시오.

답변1

sed -r 's/^.*\((.{32})\).*$/\1/' filename

답변2

Perl에서는 음수 인덱싱을 사용하면 오른쪽부터 문자 수를 셀 수 있습니다.

perl -aF, -lne 'print substr $F[3], -33, 32' < input
  • -n입력을 한 줄씩 읽습니다.
  • -a@F입력을 배열 로 분할
  • -F분할할 항목 지정
  • -l인쇄할 줄 바꿈 추가

관련 정보