sedを使用してコマンド出力の一部を印刷する方法

sedを使用してコマンド出力の一部を印刷する方法

コマンド出力の一部を印刷しようとしています。

cat script.sh | grep Xmx 

java -jar -Duser.language=en -Djava.awt.headless=true -Xms1024m -Xmx1024m -Dspring.profiles -Dspring.cloud.config.uri ...*

私はそれをリストする必要があります-Xms1024m -Xmx1024m

さまざまなサービスで実行する必要があり、スクリプトも異なるため、awkORは使用できません。cut

2つの文字sedの間で選択文字列を使用してみましたが、動作しません。機能しない理由は、サービスごとにスクリプトが異なるためです。一部には「-Djava.awt.headless = true」フラグがあり、他の一部にはありません。true-Dspringsed -e 's/.*true\(.*\)-Dspring/\1/'

sed正しい構文の使用に関する洞察を提供してください。

ベストアンサー1

上記のコメントに基づいて、常に2つのパラメータを一緒に使用し、順序は次のように仮定し、次のコマンドを使用できます。

sed -n -e 's/.*\s\(-Xms\S*\s*-Xmx\S*\).*/\1/p' script.sh

何が起こるかは次のとおりです。

  • この-nフラグは出力が印刷されるのを防ぎますが、ルールに一致pする内容はすべて sed 式の末尾に印刷されます。

  • この式は、\s空白\S以外の文字に適用されます。

  • 式の最初の部分は、.*\s括弧内のパターンの前の空白文字まで行の先頭をキャプチャする必要があります(キャプチャグループ)。

  • -Xms\S*最初の引数と一致します。で始まり、-Xmsスペース\S*内のすべてのアイテムと一致します(例:「1000m」または「1.5G」)。

  • \s*空白文字が0個以上あります(\s\s*分離保証)。

  • -Xmx\S*目的の2番目の引数を再び次の空白まで一致させます。

  • キャプチャグループをオフにし、残りの行を無視してキャプチャグループに置き換えます。

正規表現を実行する他の方法は、おそらく何十ものものです。しかし、テストするときに最初に浮かんで効果があった方法はこれでした。

おすすめ記事