줄에 있는 숫자에 대한 Grep

줄에 있는 숫자에 대한 Grep

아래 두 가지 출력을 얻어야합니까?

입력

/usr/IBM/WebSphere/7.0/UpdateInstaller/java/jre/bin/java -Declipse.security -Dwas.status.socket=48101
/home/axg009/usr/IBM/WebSphere/8.5/AppServer/java_1.7_64/jre/bin/java -Declipse.security -Dwas.status.socket=48101

출력 1

7.0
8.5

출력 2

7.0/UpdateInstaller/java/jre/bin/java
8.5/AppServer/java_1.7_64/jre/bin/java

답변1

첫 번째 경우:

grep -oP 'IBM/WebSphere/\K[0-9]\.[0-9]' file

두 번째의 경우:

grep -oP 'IBM/WebSphere/\K[0-9]\.[0-9].*java ' file
  • -PPerl 정규 표현식을 활성화합니다.
  • -o일치하는 부분만 인쇄
  • IBM/WebSphere/\K일치하는 변수를 비울 때 까지 부분의 시작 \K부분이므로 인쇄되는 부분이 아닙니다.
  • [0-9]\.[0-9]숫자 뒤에 점과 다른 숫자가 옵니다.
    • .*java두 번째에서는 java 명령이 끝날 때까지( java뒤에 공백이 올 때까지) 일치시키려고 합니다.

답변2

ps -Aocomm= | sed -ne'/java$/s|.*/\([0-9]\.\)|\1|p'

거기에 출력된 것처럼 보이지만 ps만약 그렇다면 검색하는 명령에 인수를 포함하는 것은 아마도 실수일 것입니다. grep검색 패턴이 다음과 같기 때문에 결과를 ping 하는 경우 특히 그렇습니다..*java.*또는 당신이 실행하는 명령과 일치할 가능성이 높습니다 grep.

comm=다행스럽게도 위에서 수행한 것처럼 및 이름 만 검색하고 해당 결과를 정리할 수 있습니다 .출력 2. 처음으로:

ps -Aocomm= | sed -ne'/java$/s|.*/\([0-9]\..\).*|\1|p'

그렇지 않은 경우 ps에도 작동합니다.

sed 's|.*/\([0-9]\.[^ ]*\).*|\1|' <in

...을 위한출력 2, 그리고...

sed 's|.*/\([0-9]\..\).*|\1|' <in

...을 위한출력 1...

답변3

당신이하지 않았기 때문에설명원하는 것은 있지만 입력 및 출력 1 만 표시되어 있으므로 가능한 답변이 매우 많습니다.

바보 같은 것들

  1. printf "7.0\n8.5\n"
  2. printf "7.0/UpdateInstaller/java/jre/bin/java\n8.5/AppServer/java_1.7_64/jre/bin/java\n"

이는 입력을 읽을 필요조차 없다는 장점이 있습니다.

당신이 정말로 원하는 것이 무엇인지에 대한 최선의 추측

  1. 조금 까다로워지거든요.

    grep -o "[0-9].[0-9]"입력
    출력을 산출합니다

    7.0
    8.5
    1.7
    

    모든 시퀀스를 찾고 입력의 두 번째 줄에 두 개가 있기 때문입니다. 하지만digit.digit

    grep -o "/[0-9].[0-9]/"입력
    출력을 산출합니다

    /7.0/
    /8.5/
    

    (모든 시퀀스) 원하는 결과에 가까울 수 있습니다./digit.digit/

    grep -o "/[0-9]\.[0-9]/"입력| grep -o "[0-9]\.[0-9]"

    출력을 산출합니다

    7.0
    8.5
    
  2. grep -o "[0-9]\.[0-9][^ ]*"입력

    로 시작하는 공백이 아닌 문자의 모든 시퀀스를 가져옵니다 .  라인 에 포함되어 있기 때문에 라인 자체를 얻지 못합니다 .digit.digit1.78.5/…

____________
1 질문에는 항상 입력 및 출력 예시를 포함하시기 바랍니다. 하지만또한입력에서 출력으로 어떻게 이동하고 싶은지 설명하지 않으면 어리석은 대답을 얻게 됩니다.

답변4

grepPCRE( )와 함께 사용 -P:

첫 번째:

$ grep -Po '/\K[[:digit:].]+(?=/)' file.txt 
7.0
8.5

두번째 것:

$ grep -Po '/\K[[:digit:].]+/[^ ]+' file.txt 
7.0/UpdateInstaller/java/jre/bin/java
8.5/AppServer/java_1.7_64/jre/bin/java
  • 첫 번째 경우에는 x와 y가 모두 숫자인 /\K[[:digit:].]+(?=/)형식으로 숫자를 가져옵니다./x.y/

  • /\K[[:digit:].]+/[^ ]+/x.y/두 번째 경우에 우리가 원하는 부분인 공백을 나타내는 하위 문자열을 찾습니다.

관련 정보