>

이 형식의 파일이 있습니다

와이즈 비즈

그래서 저는 이와 같은 수천 줄을 가지고 있으며

[ 2014/05/01 10:48:26 | 13963 | DEBUG ] It took 11.16837501525879 seconds to complete the process

를 "추출"하고 싶습니다  부품
나는 시도했다 :

11.16837501525879

그러나 나는 얻는다 :

sed -e 's/^.* (\d+\.\d*)/\1/g' logfile.txt > out.txt 

여기서 무엇을 할 수 있습니까?

sed: -e expression #1, char 21: invalid reference \1 on `s' command's RHS
  • 답변 # 1

    sed  기본적으로 기본 정규 표현식을 사용하고 BRE는 \d 에 대해 알지 못함 . 다른 접근 방식은 다음과 같습니다.

    <올>

    sed

    sed -r 's/.* ([0-9]+\.*[0-9]*).*?/\1/' logfile.txt > outfile.txt
    
    

    와이즈 비즈  괄호를 피할 필요가 없습니다.

    -r

    perl
    
    

    perl -pe 's/.* (\d+\.*\d*).*/$1/' logfile.txt > outfile.txt

    grep
    
    

    이들은 모두 기본 접근 방식을 사용하는데, 공백 앞에 오는 줄에서모든자리를 찾습니다. 줄에 나타날 수있는 숫자의 수에 따라 입력 줄이 항상 표시되는 형식 인 경우 더 안전한 방법은 다음과 같습니다.

    grep -Po '.* \K\d+\.*\d*' logfile.txt > outfile.txt
    
    

  • 답변 # 2

    그룹화 괄호는 sed로 백 슬래시해야합니다. 또한 sed는 grep -Po 'took \K\d+\.*\d*' logfile.txt 를 지원하지 않습니다 . 또한 숫자다음을 제거해야합니다 :

    \d
    
    

    BTW, 점이 항상 존재합니까, 소수는 선택 사항입니까? 와이즈 비즈  예상 값으로 보이지 않습니다.

  • 답변 # 3

    awk를 사용하여 11 번째 열을 인쇄 할 수 있습니다.

    sed -e 's/^.* \([0-9]\+\.[0-9]*\) .*/\1/g'
    
    
    12.

관련 자료

  • 이전 process - pstree의 한 분기에 sshd가 여러 번 표시되는 이유는 무엇입니까?
  • 다음 디스크 암호화를 사용한 사전 부팅 인증은 어떻게 기술적으로 작동합니까?