Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何将VI中的搜索选择复制到剪贴板并粘贴到同一文件中?_Regex_Linux_Bash_Vi - Fatal编程技术网

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
    映射到粘贴)
  • 重复使用j和l高亮显示要复制内容上的块
  • 按y键以拖动内容。光标将返回第一行
  • 按$跳到第一行的末尾
  • 按p键粘贴内容

  • 在你的具体例子中,这对我很有用:

    :'<,'>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/