私は次の文字列を持っています:
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=\$\!\).*$//'
sed -e 's/& PID=\$\!;$//'
$
終わりに向かって、文字列の終わりに固定します。
行の最後に出現するパターンを削除するには、それを絞るだけです。
sed 's/\(.*\)& PID=$!;/\1/'
これは、文字列を照合する前に\1
で可能な限り一致するため、削除する文字列が実際に行の末尾にあるかどうかに関係なく、常に最後の出現のみが削除されます。
あなたの試み:
sed 's/\(\& PID=\$\!\).*$//'
...反対のようなことをします。文字列の最初の出現から始まり、行の終わりまで続く行のすべての文字を削除します。
leftmost-longestルールを覚えておいてください-正規表現は常に文字列の左端まで一致を開始し、可能な限り一致し続けます。
n
の最後の文字だけを削除したい場合は、gnu sed
を使用することに注意してください。
sed -E 's/.{9}$//'
ここで、拡張正規表現を使用するには、-E
オプションが必要です。
これまでのところ、すべての回答は適切ですが、この具体的な例では、時間を節約し、数文字を減らすことができます。
sed 's/ & [^ ]*$//'
またはさらに良い
sed 's/ & \S*$//'