我有很多包含文本的 .txt 文件。在文本中有一些符号,比如说“@”。它们出现在随机位置。我想用另外 2 个符号替换这些符号中的前 2 个。因此,如果我有“@@ ... @ ... @@”(其中 ... 是文本),我想将其变为:xx ... @ ... @@ (如果我想替换@由 x)。我只想替换前两个符号,但我只遇到过允许我一次替换所有内容或什么都不替换(以这样的规模)的选项。是否有任何程序或功能可以让我一次对大量文件执行此操作,换句话说,我不必手动为每个文件执行此操作?
问问题
38 次
1 回答
-1
您可以在Vim
编辑器中执行此操作。首先,这是如何在一个文件中执行此操作。假设我们在缓冲区中有这个文件。
junk
@@@@
@@@@
@
这是将文件中第一次出现的 替换为 的命令x
。要执行两次,我们只需执行两次:
:0/@/s/@/x/
如果我们得到后执行它:
junk
x@@@
@@@@
然后如果我们再执行一次,我们会得到:
junk
xx@@
@@@@
解剖学:
start search at 0 (before first line)
| search for something
|| search for a line containing @
||| when you find @ perform a substitution command
||| | replace this
||| | | with that (just once: the first occurrence in the line)
||| | | |
vvv v v v
:0/@/s/@/x/
^
要在大量文件上运行此命令,我们可以使用脚本自动执行该命令,例如:
# find all the .txt files here and in all subdirectories,
# and execute the command "ex <file> < script" on them
$ find . -name '*.txt' -exec ex {} < script \;
我们使用ex
作为替代名称的命令vi
以 ex 模式启动它,它接受ex
标准输入上的命令。
script
填充物包含以下内容:
0/@/s/@/x/
0/@/s/@/x/
x
即做两个这些替换,然后:x
保存并退出。
vi 中使用的冒号不是必需的,因为冒号是vi
用于输入命令的交互式命令模式中的ex
命令。
于 2013-06-11T00:07:56.683 回答