1

谁能告诉我一个匹配一行开头或结尾的正则表达式?例如,如果我使用sed 's/[regex]/"/g' filehere输出将是引号中的每一行?我试过了[\^$][\^\n]但它们似乎都不起作用。我可能遗漏了一些明显的东西,我对这些很陌生

4

3 回答 3

4

尝试:

sed -e 's/^/"/' -e 's/$/"/' file
于 2013-01-04T17:55:58.643 回答
3

在每行的开头和结尾添加引号很简单:

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

但是,您试图想出的匹配每行开头或结尾的 RE 是:

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

它是一个 ERE(由“-r”启用),因此它可以与 GNU sed 一起使用,但不能与旧的 sed 一起使用。

于 2013-01-04T20:33:27.530 回答
0

matthias 的响应是完全足够的,但您也可以使用反向引用来执行此操作。如果您正在学习正则表达式,那么了解它们是一件很方便的事情。

这是使用反向引用完成的方法:

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

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

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

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

于 2013-01-04T20:35:51.207 回答