
以下の 2 つの出力を取得する必要がありますか?
入力
/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
2番目については:
grep -oP 'IBM/WebSphere/\K[0-9]\.[0-9].*java ' file
-P
Perl正規表現を有効にする-o
一致する部分のみを印刷しますIBM/WebSphere/\K
\K
対応する変数を空にするまでの部分の始まりなので、これは印刷されるものの一部にはなりません。[0-9]\.[0-9]
数字の後にドットが続き、さらに別の数字が続きます。.*java
2 番目では、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だけ表示され、考えられる答えは非常に多くあります。
愚かな者たち
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
なぜなら、すべてのシーケンスが見つかり、入力の2行目には2つのシーケンスがあるからです。しかし
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
:
最初の1つ:
$ 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/
2番目のケースで必要な部分であるスペースから始まる部分文字列を探します。