Regex 如何将VI中的搜索选择复制到剪贴板并粘贴到同一文件中?
我将给你一个我正在尝试做的例子。假设我有一个包含以下数据的文件:Regex 如何将VI中的搜索选择复制到剪贴板并粘贴到同一文件中?,regex,linux,bash,vi,Regex,Linux,Bash,Vi,我将给你一个我正在尝试做的例子。假设我有一个包含以下数据的文件: mv AB12350_PCOUTData.txt ./ mv AB12351_PCOUTData.txt ./ mv AB12352_PCOUTData.txt ./ mv AB12353_PCOUTData.txt ./ mv AB12360_PCOUTData.txt ./ mv AB12374_PCOUTData.txt ./ 我试图复制“AB123xx”部分并粘贴到末尾,以获得以下内容: mv AB12350_PCOUT
mv AB12350_PCOUTData.txt ./
mv AB12351_PCOUTData.txt ./
mv AB12352_PCOUTData.txt ./
mv AB12353_PCOUTData.txt ./
mv AB12360_PCOUTData.txt ./
mv AB12374_PCOUTData.txt ./
我试图复制“AB123xx”部分并粘贴到末尾,以获得以下内容:
mv AB12350_PCOUTData.txt ./AB12350
之后,我将附加一个“.txt”以缩短文件名。我的想法是,我可以使用带有正则表达式字符的搜索功能来突出显示所需的文本,如下所示:
/AB123[567][01234]
然后我可以简单地将它复制到剪贴板,粘贴到每一行的末尾,并附加“.txt”。显然,Shift+Ctrl+C对搜索文本不起作用,只对高亮显示的文本起作用。我也尝试过使用yank和put,但没有成功。有没有一个简单的方法可以做到这一点?或者是一个更好的方法来完成同样的事情?我的实际文本文件比上面的示例长得多,因此手动操作实际上不是一个选项。谢谢 我假设您可以访问文件所在的目录 您只需要对它们进行批处理,并假设上面的解决方案是将dir列表保存到一个文件并在行的前面附加“mv”的结果 另一种方法是“在线”和通过管道操作目录列表 首先 当您确定它按您想要的方式工作时,重定向到您最喜欢的shell,即
ls -1 *PCOUTData.txt | awk '-F_' '{printf("mv %s ./%s\n", $0, $1)}' | ksh
如果文件名中包含空格,则必须阅读find-print0-prune
作为清理的前端名称生成器
IHTH.这对于宏来说相当容易 但是,在这种特殊情况下,您可以使用块视觉模式复制和粘贴内容(假设您实际使用的是vim,而不仅仅是普通vi):
A
上C-V
以进入块选择模式(或C-Q
如果您在Windows上,并且已将C-V
映射到粘贴)在你的具体例子中,这对我很有用:
:'<,'>s/\(.*\(AB\d\+\)_.*\)/\1\2/
:“它可以工作,但您忘记了在它之前目视选择块。这正是我要找的,谢谢!我的问题是,我不知道如何使用“j”和“l”在字符迭代中上下移动,从而突出显示该文本块。作为一种解决方法,我尝试使用正则表达式字符搜索来突出显示所需的文本。右箭头键和下箭头键可能也会起作用,但j和l更为传统,因为您不必将手从触摸输入位置移开。我添加了“.txt”在本文的结尾添加如下扩展:ls-1*PCOUTData.txt | awk'-F{printf(“mv%s./%s\n,$0,$1.txt”)}
之后,它像一个符咒一样工作,比我原来的方法快得多,谢谢!
:'<,'>s/\(.*\(AB\d\+\)_.*\)/\1\2/