次の文字列があります。
ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE & PID=$!;
最後の単語を削除したいです& PID=$!;
。必要な結果は次のとおりです。
ksh -x SCRIPT2.ksh $BUSSINESSDATE & PID=$!; ksh -x SCRIPT1.ksh $BUSSINESSDATE
ノート& PID=$!;
:文字列の真ん中にあります。含まれている最後の単語を削除するだけです。& PID=$!;
を使用してこれを実装していますsed
。しかし、期待した結果が出ないようです。
sed 's/\(\& PID=\$\!\).*$//'
答え1
sed -e 's/& PID=\$\!;$//'
端に向かって$
ロープの端に固定します。
答え2
これまでの回答はすべて優れていますが、この特定の例では時間を節約し、文字を少なくすることができます。
sed 's/ & [^ ]*$//'
またはより良い
sed 's/ & \S*$//'
答え3
行で最後に表示されたパターンを削除するには、そのパターンをキャッチするだけです。
sed 's/\(.*\)& PID=$!;/\1/'
これは一致する前にできるだけ多くの文字列と一致するため、削除する\1
文字列が実際に行の末尾にあるかどうかにかかわらず、常に最後の一致のみを削除します。
あなたの試み:
sed 's/\(\& PID=\$\!\).*$//'
...逆にしてください。文字列が最初に表示される部分から行末までの行のすべての文字を削除します。
覚える左が一番長いです。規則 - 正規表現は、可能な限り常に文字列の左側から一致を開始し、できるだけ一致し続けます。
n
最後の文字だけを削除するには、gnuを使用します。sed
sed -E 's/.{9}$//'
-E
このオプションは、拡張正規表現を使用するために必要です。