需要正则表达式来替换整行,但最后一个可选字符

需要正则表达式来替换整行,但最后一个可选字符

听起来这应该是一件微不足道的任务,但我无法弄清楚,所以我决定问一下。我需要替换整行,但最后一个字符是可选的。例如,我想要:
abcd成为efgh
abcd,成为efgh,
我怎样才能创建这样的正则表达式?看来可选字符不能向后引用,即类似: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

相关内容