正则表达式匹配行的开头和结尾?

时间:2013-01-04 17:53:05

标签: regex bash sed end-of-line start-of-line

有人能告诉我一个匹配行的开头或结尾的正则表达式吗?例如如果我使用sed 's/[regex]/"/g' filehere输出将是引号中的每一行?我尝试了[\^$][\^\n],但它们似乎都没有效果。我可能错过了一些明显的东西,我是这些

的新手

3 个答案:

答案 0 :(得分:4)

尝试:

sed -e 's/^/"/' -e 's/$/"/' file

答案 1 :(得分:3)

在每行的开头和结尾添加引号只是:

sed 's/.*/"&"/g'

你试图提出的RE以匹配每一行的开头或结尾,但是:

sed -r 's/^|$/"/g'

它是一个ERE(由“-r”启用)所以它可以与GNU sed配合使用,但不适用于较旧的seds。

答案 2 :(得分:0)

matthias的反应非常充分,但您也可以使用反向引用来做到这一点。如果你正在学习正则表达式,那么它们就是一个很容易理解的东西。

这是如何使用反向引用来完成的:

sed 's/\(^.*$\)/"\1"/g' file

该正则表达式的核心是^.*$,这意味着匹配行开头(.*)和行尾({{{^)所包围的任何内容($) 1}}),这实际上意味着它每次都匹配整行。

将该术语放在括号内会创建一个我们稍后可以引用的反向引用(在替换模式中)。但是为了让sed意识到你的意思是创建一个反向引用而不是匹配文字括号,你必须用反斜杠来转义它们。因此,我们最终将\(^.*$\)作为我们的搜索模式。

替换模式只是一个双引号,后跟\1,这是我们的反向引用(返回括在括号中的第一个模式匹配,因此为1)。然后添加您的上一个双引号以"\1"结束。