![텍스트 파일의 문자열 일부를 반환합니다.](https://linux55.com/image/86975/%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%20%EC%9D%BC%EB%B6%80%EB%A5%BC%20%EB%B0%98%ED%99%98%ED%95%A9%EB%8B%88%EB%8B%A4..png)
배경:
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)
질문:
추출 방법:
AlphaNum_Need_This_32_Char_Long1 AlphaNum_Need_This_32_Char_Long2
또는
부품을 폐기합니다
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
인쇄할 줄 바꿈 추가