2

我会给你一个我正在尝试做的例子。假设我有一个包含以下数据的文件:

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 并没有成功。是否有捷径可寻?或者也许有更好的方法来完成同样的事情?我的实际文本文件比上面的示例要长得多,因此手动操作并不是一个真正的选择。谢谢!

4

3 回答 3

1

我假设您可以访问文件所在的目录,并且您只想对它们进行批量操作,并假设您上面的解决方案是将目录列表保存到文件并将“mv”附加到前面的结果的线。

另一种方法是“在线”和通过管道操作目录列表。

第一的

ls -1 *PCOUTData.txt | awk '-F_' '{printf("mv %s ./%s\n", $0, $1)}'
mv AB12350_PCOUTData.txt ./AB12350
mv AB12351_PCOUTData.txt ./AB12351

当你确定它以你想要的方式工作时,重定向到你最喜欢的 shell,即

ls -1 *PCOUTData.txt | awk '-F_' '{printf("mv %s ./%s\n", $0, $1)}' | ksh

如果您的文件名包含空格,则您必须阅读find -print0 -prune作为清理的前端名称生成器。

IHTH。

于 2013-07-09T19:50:35.127 回答
1

使用宏将相当容易。

但是,在这种特殊情况下,您可以使用块可视模式复制和粘贴内容(假设您实际上有 vim 而不仅仅是普通 vi):

  1. 将光标放在第一个A.
  2. 键入C-V以进入块选择模式(或者C-Q如果您在 Windows 上并已C-V映射到粘贴)。
  3. 反复使用jl突出显示要复制的内容上的块。
  4. y拉出内容。光标将返回第一行。
  5. $跳到第一行的末尾。
  6. p粘贴内容。
于 2013-07-09T19:50:52.250 回答
0

在您的具体示例中,这对我有用:

:'<,'>s/\(.*\(AB\d\+\)_.*\)/\1\2/
于 2013-07-09T19:57:16.133 回答