这个问题也可以说成是如何在长文本每一行的前面和后面都插入特定的相同字符或文本?
例如原始txt文档为:

1
2
3
4
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。

要在每一行的前面和后面都插入特定的相同字符或文本,就要变成如下效果:

1
2
3
4
123abc 床前明月光, 456xyz
123abc 疑是地上霜。 456xyz
123abc 举头望明月, 456xyz
123abc 低头思故乡。 456xyz

这个例子只是短了点,可以手动复制粘贴,但如果是长文本又该如何快捷操作?

经过查阅大量资料,有以下几种办法:

办法一:notepa++的列编辑

先说在每行行首插入相同文本的办法。首先把原始文本粘贴到notepa++里,然后事先复制好你要重复输入的字符123abc,然后把光标移到第一行第一列,也就是“床”的前面,然后按住ALT键,鼠标从第一行直接拉到最末行,然后就看到光标变长了,最后直接ctrl+v粘贴即可。
然后把光标移到第一行的末尾,就可以用列编辑在每行行尾插入重复文本了。

办法二: notepa++正则表达式替换

把原始文本粘贴到notepa++里后,搜索,替换,查找目标里输入^,替换为里输入123abc注意:下方的查找模式里要选择“正则表达式”,最后点击“全部替换”就能看到效果了。

行尾操作也类似,查找目标里输入$,替换为里输入456xyz即可。

^匹配行首,而$匹配行尾。

办法三:gVIM命令

如果你使用vim,那么下面的命令可以让你在每行快速插入重复字符。
每行的行首都添加自定义的文本或字符串:

1
:%s/^/要插入的字符串

每行的行尾都自定义的文本或字符串

1
:%s/$/要插入的字符串

例如要在每行行尾输入456xyz,可以先打冒号,然后直接ctrl+v或者用手势粘贴%s/$/456xyz即可。

另一个在每行行首插入相同字符的办法,这是在国外网站上发现的:
先调光标到第一行的行首,然后按Ctrl+Q选择列,然后按j选择多列,然后按Shift+i,然后输入你要像插入的字符串,最后按Esc就OK了。

办法四:excel的CONCATENATE函数

先复制原始txt文档,然后新建一个excel,在B1单元格右键,粘贴,然后在A1中输入123abc,下拉复制;同样在C1中输入456xyz,下拉复制。然后在D1中输入=CONCATENATE(A1,B1,C1),回车即可把A1B1C1连起来,最后下拉就完成了。
其中=CONCATENATE(A1,B1,C1)命令等同于=A1&B1&C1,当元素少的时候,使用&比较简便。

我也在知乎提了这个问题,希望知道更多更好的办法:)

参考:

  1. Notepad++的列编辑功能
  2. vim 每行行首或行行尾插入相同字符串
  3. How do I insert text at beginning of a multi-line selection in vi/Vim?
  4. Excel中concatenate函数的使用方法