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검색 패턴이 다르기 때문에 결과를 핑하는 경우 특히 그렇습니다..*java.*또는 "what-have-you" 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/두 번째 경우에서 원하는 부분인 from to 공백을 나타내는 하위 문자열을 찾습니다 .

관련 정보