2012-11-15 1 views
1

파일 이름을 추출해야하는 큰 로그 파일이 있습니다.텍스트 파일의 첫 번째 공백 뒤에 각 줄의 모든 문자를 제거하려면 어떻게합니까?

파일은 다음과 같습니다 :/''모든 /path/to/ 교체

loremIpsumDolor.sit 
anotherFile.ext 

나는 내 첫 번째 전략은 찾을 수 있습니다 도표 :

/path/to/loremIpsumDolor.sit /more/text/here/notAlways/theSame/here 
/path/to/anotherFile.ext /more/text/here/differentText/here 
.... about 10 million times 

나는이 같은 파일 이름을 추출해야합니다. 그러나 나는 공간 뒤의 모든 문자를 제거하는 방법에 집착하고있다.

도와 주시겠습니까?

답변

3
sed 's/ .*//' file 

더 이상 소요되지 않습니다. 변환 된 출력은 물론 표준 출력에 나타납니다. cut

+0

음 ... 제 스페이스 후에 박리 용 정규식? 당신에게서 그것을 기대하지 않을 것이다 ;-) –

+0

무차별 공격'sed' 행동; 나는 그것을 좋아한다. Windows가 기본적으로 sed, grep, awk 등과 같은 강력한 텍스트 조작 도구를 제공하지 않는 것은 부끄러운 일입니다. 이것들은 시스템 관리자 (IMHO)를위한 빵 - 버터 도구입니다. – Will

+1

표준 ([POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/cut.html)) 버전이 필드 사이에 하나 이상의 구분 기호를 처리하지 않기 때문에 '컷'을 싫어합니다. ; GNU'cut '은'-i' 옵션을 필요로하지만, GNU'cut'을 사용할 수있는 것은 아닙니다. 이 작업과 관련하여 문제는 아니지만 도구가 작동하지 않기 때문에 도구를 사용하지 않는다면 도구를 사용하지 않아도됩니다. 'sed'는 사용하기 쉽지만, 여러가지 도구가 있습니다 ('awk','perl','python'은 모두 매우 쉽게 사용할 수 있지만 필요 이상으로 복잡합니다.) –

2

패스를 :

awk '{ print $1 }' input_file.log 

물론, 더이 있다고 가정하지, 그건 :로

cut '-d ' -f1 yourfile 
+0

입력 리디렉션은 필요하지 않습니다. 단 하나의 파일 만 처리 할 때는 아무런 해가 없습니다. –

+0

@JonathanLeffler, 사실. 제출 한 후에도 생각했습니다. 나는 그것을 편집 할 것이다. –

2

이론적으로, 당신은 또한 각 라인에서 파일 이름을 잡아 awk를 사용할 수 있습니다 파일 이름의 공백 awk은 기본적으로 필드 구분 기호로 공백을 찾는 것이므로 위의 스 니펫은 각 줄의 로그 파일 (파일 이름)에서 첫 번째 "필드"를 가져 와서 출력합니다.

+0

아,하지만 실제 실제 로그 파일에는 공백이 있습니다. 그러나 나는이 방향을 좋아한다. 실제로는'textHere thenSpaces /path/to/file.ext/ more/text/here'와 비슷합니다. 어쨌든 (항상 같기 때문에) 첫 번째 부분을 찾거나 교체해야한다고 생각했기 때문에 언급하지 않았습니다. – Ryan

+0

@ Ryan : 아니 땀; 두 번째 필드가 될 것이므로'print $ 2'를 대신 사용하면됩니다. 'awk'는 이와 같은 것들을위한 편리한 도구이며, 그것을 사용하는 것이 합리적으로 좋은 가치가 있습니다. – Will

0

떠들썩한 전용 용액 :

while read path otherstuff; do 
    echo ${path##*/} 
done < filename 
관련 문제