次の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.*
あるいは、「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
すべてのシーケンスを探して、入力の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
:
最初:
$ 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番目のケースでは、目的の部分であるfrom toスペースを表す部分文字列を見つけます。