2012-06-26 3 views
5

다음은 원시 데이터의 덩어리입니다 :sed를 사용하면 문자 클래스에서 대괄호와 어떻게 일치합니까?

00000000 54 6f 70 69 63 20 46 6f 72 75 6d 20 52 65 70 6c |Topic Forum Repl| 
00000010 69 65 73 20 4c 61 73 74 20 70 6f 73 74 20 31 20 |ies Last post 1 | 
00000020 4c 69 6e 75 78 20 54 6f 64 61 79 20 31 34 3a 34 |Linux Today 14:4| 
00000030 36 3a 35 37 20 62 79 20 4c 69 6e 75 78 20 4f 75 |6:57 by Linux Ou| 
00000040 74 6c 61 77 73 20 32 36 39 20 e2 80 93 20 53 6f |tlaws 269 ... So| 
00000050 6d 65 6f 6e 65 20 4b 6c 6f 73 65 20 54 68 61 74 |meone Klose That| 
00000060 20 4f 75 74 6c 61 77 73 20 32 38 20 73 79 73 79 | Outlaws 28 sysy| 
00000070 70 68 75 73 2e 6a 6f 6e 65 73 20 48 6f 6c 65 20 |phus.jones Hole | 
00000080 62 79 20 59 4f 42 41 20 5b 20 31 20 32 20 5d 20 |by YOBA [ 1 2 ] | 
00000090 32 20 4c 69 6e 75 78 20 26 20 54 6f 64 61 79 20 |2 Linux & Today | 
000000a0 31 31 3a 34 34 3a 35 31 20 62 79 20 4c 6f 6f 6b |11:44:51 by Look| 
000000b0 73 20 6c 69 6b 65 20 43 61 6e 6f 6e 69 63 61 6c |s like Canonical| 
000000c0 20 69 73 20 61 6e 6e 6f 75 63 69 6e 67 20 70 6c | is annoucing pl| 
000000d0 61 6e 73 20 46 72 65 65 64 6f 6d 20 31 20 6b 72 |ans Freedom 1 kr| 

그것은 헥스 덤프 있고 난 텍스트 부분을 절연에 관심이 있어요. 거의

$ sed 's/.* |\([a-zA-Z0-9:& \.]*\)|$/\1/g' hex.dat 
Topic Forum Repl 
ies Last post 1 
Linux Today 14:4 
6:57 by Linux Ou 
tlaws 269 ... So 
meone Klose That 
Outlaws 28 sysy 
phus.jones Hole 
00000080 62 79 20 59 4f 42 41 20 5b 20 31 20 32 20 5d 20 |by YOBA [ 1 2 ] | 
2 Linux & Today 
11:44:51 by Look 
s like Canonical 
is annoucing pl 
ans Freedom 1 kr 

: 다음은 거의 작동 나오지 표현입니다. 하지만 마지막 줄을 어떻게 필터링 할 수 있습니까?

$ sed 's/.* |\([a-zA-Z0-9:&\[\] \.]*\)|$/\1/g' hex.dat 

그리고 :

$ sed 's/.* |\([a-zA-Z0-9:&\\[\\] \.]*\)|$/\1/g' hex.dat 

가 전혀 작동하지 마십시오 (그들은 아무 것도 번역하지).

그리고 :

$ sed 's/.* |\([a-zA-Z0-9:&[] \.]*\)|$/\1/g' hex.dat 

분명히 작동하지 않을 수 있습니다.

도움 주셔서 감사합니다.

+1

'cut -d '|' -f2 hex.dat'? –

+0

매우 깔끔한 토마스. 가끔은 복잡한 일을 할 수 있습니다. :) 그러나 twmb의 대답은 참고로 기쁩니다. – Thorsen

답변

10

거의 들었습니다.

Unix regular expressions tutorial의이 섹션을 살펴보십시오.

당신이 할 수있는 방법은 [캐릭터 클래스를 시작한 직후에] [배치]하는 것입니다.

그래서, 대한 명확한 sed 's/.* |\([][a-zA-Z0-9:& \.]*\)|$/\1/g' hex.dat

을 시도, 그것은 중요하지 않습니다 어디 [이되는 문자 클래스에서 너무 오래 즉시의 개방을 다음 당신이 당신의 문자 클래스 (])에 포함하려는 닫는 대괄호로 당신의 캐릭터 클래스.

또한 편집하려면 man cut을 입력하고 Tomasz의 의견을 사용하십시오.

cut -d='|' -f2 hex.dat은 파일을 잘라내 파이프에서 구분하고 두 번째 필드를 가져옵니다.

+1

고마워요. twmb ... (너무) 아직 멀었습니다. :) – Thorsen

관련 문제