Grepは行内の数字を探します。

Grepは行内の数字を探します。

次の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
  • -PPerl正規表現の有効化
  • -o一致する部分のみ印刷
  • IBM/WebSphere/\K\K一致変数が消去されるまでセクションを指定するため、印刷される内容の一部にはなりません。
  • [0-9]\.[0-9]数字の後にはドットが続き、その後には別の数字が続きます。
    • .*java2番目は、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だけを表示すると、できるだけ多くの答えがあります。

愚かな人

  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
    

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

関連情報