Sed/RegEx - 説明を理解する

Sed/RegEx - 説明を理解する

だから私は現在、以前のシステム管理者から渡されたスクリプトの配置をリバースエンジニアリングしようとしています。

シェルスクリプトの1つに、私が(生涯の間)理解できない行があります。ここにいる:-

sed -n 'H;${x;s/^\n//;s/-jar\n/Dcom.sun.management.jmxremote.ssl=false\n&/;p;}' "$File"

GNU Bash 4.2.46(2) RHEL6 64ビット。

ベストアンサー1

このコマンドにはGNUが必要で、行末の最初の項目の前に文字列を挿入し、その後に改行文字が続くようですsedDcom.sun.management.jmxremote.ssl=false-jar

例:

something
something
something-jar
something

に変換される

something
something
somethingDcom.sun.management.jmxremote.ssl=false
-jar
something

このsedコマンドは、ファイルの各行を実行してファイル全体をメモリに読み込みますH(現在の行を「予約済みスペース」に追加し、先頭に改行文字を追加します)。最後の行()に達すると、予約済み$スペースをパターンスペース(x)に置き換え、最初の改行文字(Hファイルの最初の行を実行してそこに配置されます)を削除します。それから(theは式と一致するものです)-jar\nに置き換えられます。次に、収集された行()を印刷します。Dcom.sun.management.jmxremote.ssl=false\n-jar\n&p

同じタスクを実行する別の方法awk

awk 'skip==0 && sub("-jar$", "Dcom.sun.management.jmxremote.ssl=false\n-jar") { skip=1 } { print }' "$File"

これはすべての行で同じ置換を試み、成功するとskip=1再試行しないように設定します。置換が発生したかどうかに関係なく、各行が印刷されます。

これは実際にいいえファイル全体をメモリに保存します。

おすすめ記事