다음 두 가지 출력을 얻어야 합니까?
입력하다
/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
-P
Perl 정규식 활성화-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 만 표시 하면 가능한 답변이 많이 있습니다.
멍청한 사람들
printf "7.0\n8.5\n"
printf "7.0/UpdateInstaller/java/jre/bin/java\n8.5/AppServer/java_1.7_64/jre/bin/java\n"
이것의 장점은 입력을 읽을 필요조차 없다는 것입니다.
당신이 정말로 원하는 것이 무엇인지에 대한 최선의 추측
이게 좀 까다롭기 때문에
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
grep -o "[0-9]\.[0-9][^]*"입력하다
로 시작하는 공백이 아닌 모든 문자 시퀀스를 가져옵니다. 해당 행 내에 포함되어 있으므로 행 자체가 없습니다.
digit.digit
1.7
8.5/…
____________
1 질문에는 항상 입력 및 출력 예시를 포함시키십시오. 하지만반품입력에서 출력으로 어떻게 이동하고 싶은지 설명하세요. 그렇지 않으면 어리석은 대답을 얻게 될 것입니다.
답변4
grep
PCRE()와 함께 사용 -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 공백을 나타내는 하위 문자열을 찾습니다 .