听起来这应该是一件微不足道的任务,但我无法弄清楚,所以我决定问一下。我需要替换整行,但最后一个字符是可选的。例如,我想要:
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