在vim中的行的开头和结尾添加文本

时间:2015-10-06 02:49:44

标签: regex vim

我有一个超过5000行的文件。我需要在字符串JAMES之前和之后添加以下字符,例如:

 '[^-_.*]JAMES[@-\.]'

如果我试图说JAMES可以在一行的开头,或者有破折号,下划线,任何字符在JAMES之前0次或更多次,并且@,破折号或句号可以跟随詹姆士?

我使用列表作为白名单将具有特定字符串(例如JAMES)的电子邮件打印到另一个文件。所以,它应该采取:

 cat file.txt | egrep -e -i < whitelist | sort -u > newfile.txt

file.txt的电子邮件地址以换行符号分隔。

到目前为止,我在vim中使用了以下命令:

 '%s/^$/[^-_.*]'  

但是,所有这一切都是在文件末尾添加[^-_.*]

1 个答案:

答案 0 :(得分:0)

您可能需要以下内容:

:g/.*/s//^[-_.]*&[-@.]*/

.*查找整行,:g/.*/在文件的每一行查找该行。 s//X&Y/替换g//找到的内容(整行)X,找到的内容和Y,但X除外:

^[-_.]*

表示行的开头,后跟零,更多破折号,下划线或点,Y为:

[-@.]*

表示零或更多的破折号,符号或点。如果您需要将其锚定到行尾,请在$之后添加*

请注意,-必须在字符类中显示为“first”(除非必须首先显示其他字符,例如^否定字符类,或]以匹配a关闭方括号)。