在sed中重用最后匹配的正则表达式字符

时间:2015-10-16 09:28:31

标签: regex sed

许多人倾向于使用正确的格式将会知道在另一个人编辑文件并添加行之后,在缩进行的开头有一个制表符的大量空格字符的痛苦。我似乎无法教我的同事如何使用vim的集成线粘贴功能,所以我正在寻找一些简单的方法来自动纠正以某种模式开始的线条。 ;)

我正在使用正则表达式来查找相应的行,但是在使用“查找和替换”时,我无法弄清楚如何在sed中“重用”最后匹配的字符。与行匹配的正则表达式是

'^\ *[A-Z]'

我想替换那些空格字符,但保留大写字母。我的想法就像是

sed 's|^\ *[A-Z]|\t$|g'

左右,但我想这会用一个标签字符替换整行,因为$通常与行尾相匹配?

是否有一种简单的方法可以在sed中重用匹配的正则表达式的部分?

1 个答案:

答案 0 :(得分:3)

如何在比赛中首先不包括第一个非空格字符?

这匹配一行开头的所有空格:

^ *

编辑(引用评论):

  显然,我不想替换大写字母前面的其他字符前面的空格

预见可以做到这一点,但不幸的是,sed并不支持他们。但是你可以使用下一个最好的东西,一个确定sed操作的行的表达式:

sed '|^ *[A-Z]| s|^ *|\t|'

当然,反向引用也会这样做:

sed 's|^ *\([A-Z]\)|\t\1|'