だから私は現在、以前のシステム管理者から渡されたスクリプトの配置をリバースエンジニアリングしようとしています。
シェルスクリプトの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が必要で、行末の最初の項目の前に文字列を挿入し、その後に改行文字が続くようですsed
。Dcom.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
再試行しないように設定します。置換が発生したかどうかに関係なく、各行が印刷されます。
これは実際にいいえファイル全体をメモリに保存します。