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