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