rev
を使用せずに、行末からの正規表現の一致の最後のものから置き換えるために、sedまたはBashを使用するほうが簡単かどうか知りませんか?Ned Occurrenceを行の最後からSed経由で置き換える
rev
最後に出現した文字「–」の3番目の文字と一致していますが、まだ最後の文字から一致するようにrev
を使用しています。
echo "a declaration of sovereignty need no witness" | rev | sed 's/s/S/3' | rev
a declaration of Sovereignty need no witness
更新 - Cyruses回答に基づいて一般化した解決策:
SEARCH="one"
OCCURRENCE=3
REPLACE="FOUR"
SED_DELIM=$'\001'
SEARCHNEG=$(sed 's/./[^&]*/g' <<< "${SEARCH}")
sed -r "s${SED_DELIM}${SEARCH}((${SEARCHNEG}${SEARCH}){$((${OCCURRENCE}-1))}${SEARCHNEG})\$${SED_DELIM}${REPLACE}\1${SED_DELIM}" <<< "one one two two one one three three one one"
注:それはLHSから正規表現のアイテムをエスケープする必要があり、真に汎用的であるために。 GNUで
[編集ヘルプ](http://stackoverflow.com/editing-help)をご覧ください。 – Cyrus