行全体を置き換えて最後の選択文字を置き換えるには、正規表現が必要です。

行全体を置き換えて最後の選択文字を置き換えるには、正規表現が必要です。

これは些細な作業のようですが、とても分からなくて聞いてみることにしました。行全体を置き換える必要がありますが、最後の文字はオプションです。たとえば、私は以下が欲しい。
abcdto beefghしかし
abcd,to beefgh,
このような正規表現をどのように作成できますか?オプションの文字は逆に参照できないようです。つまり、次のようになります。s/.*\(,\)?$/efgh\1動作しません(試しました:)明確にするために、行は任意の長さの任意の文字です。私の場合、唯一の条件は、置換後の行末にカンマを保持するか、行がカンマで終わらない場合は削除することです。

答え1

もう一つ:

$ echo -e "abcd\nabcd," | sed 's/.*\($\|,\)/efgh\1/'
efgh
efgh,

これは、キャプチャグループの$行末またはカンマと一致します。,

答え2

私はあなたが以下を言及していると思います:

's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g' 

sedコマンド+出力完了:

$ echo "abcd," | sed 's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g'
efgh,

$ echo "abcd" | sed 's/[a-z]\+\([^a-z]\{0,1\}\)$/efgh\1/g'
efgh

関連情報