これは些細な作業のようですが、とても分からなくて聞いてみることにしました。行全体を置き換える必要がありますが、最後の文字はオプションです。たとえば、私は以下が欲しい。
abcd
to 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