谁能告诉我一个正则表达式匹配一行的开始或结束?例如,如果我使用sed 's/[regex]/"/g' filehere
,输出将是每一行引号?我尝试了[^$]
和[^n]
,但它们似乎都不起作用。我可能遗漏了一些明显的东西,我是新手
尝试:
sed -e 's/^/"/' -e 's/$/"/' file
在每行开始和结束处添加引号的方法很简单:
sed 's/.*/"&"/g'
您试图匹配每行的开始或结束的正则,但是,是:
sed -r 's/^|$/"/g'
它是一个ERE(通过"-r"启用),所以它可以与GNU sed一起工作,但不能与旧的种子一起工作。
matthias的响应是完全足够的,但是您也可以使用反向引用来做到这一点。如果你正在学习正则表达式,了解它们是很方便的。
下面是使用反向引用的方法:sed 's/(^.*$)/"1"/g' file
在该正则表达式的核心是^.*$
,这意味着匹配由行首(^
)和行尾($
)包围的任何内容(.*
),这实际上意味着它每次都将匹配整行。
将该术语放在括号内创建了一个后向引用,我们可以稍后引用(在替换模式中)。但是要让sed意识到您想要创建一个反向引用而不是匹配文字括号,您必须用反斜杠转义它们。因此,我们最终使用(^.*$)
作为我们的搜索模式。
替换模式是一个简单的双引号,后面跟着1
,这是我们的反向引用(指向括号中包含的第一个模式匹配,因此是1)。然后添加最后一个双引号,以"1"
结束。