Text 一次只替换有限次数的大量.txt文件
我有很多包含文本的.txt文件。在课文中有一些符号,让我们说“@”。它们出现在随机位置。我想用另外两个符号替换这些符号中的前两个。所以如果我有“@…@…@@”(以…为文本),我想把它变成这个:xx…@…@(如果我想用x替换@)。Text 一次只替换有限次数的大量.txt文件,text,Text,我有很多包含文本的.txt文件。在课文中有一些符号,让我们说“@”。它们出现在随机位置。我想用另外两个符号替换这些符号中的前两个。所以如果我有“@…@…@@”(以…为文本),我想把它变成这个:xx…@…@(如果我想用x替换@)。 我只想替换前两个符号,但我遇到的选项是,要么允许我一次替换所有符号,要么什么都不替换(以这样的比例)。是否有任何程序或功能允许我一次对大量文件执行此操作,换句话说,我不必手动对每个文件执行此操作?您可以在Vim编辑器中执行此操作。首先,这里是如何在一个文件中完成它。假设
我只想替换前两个符号,但我遇到的选项是,要么允许我一次替换所有符号,要么什么都不替换(以这样的比例)。是否有任何程序或功能允许我一次对大量文件执行此操作,换句话说,我不必手动对每个文件执行此操作?您可以在
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 \;
即,执行其中两次替换,然后:x
保存并退出
vi中使用的冒号是不必要的,因为冒号是
vi
交互命令模式中的一个命令,用于输入ex
命令。我们讨论的是什么样的系统?比如,在命令行上,还是在编程语言中?你能扩展到目前为止你已经找到的选项吗?好吧,如何做并不重要。我只是想找个办法。到目前为止,我发现每一个能够同时处理大量文件的编辑器只能替换每个字符,所以它不能只替换2次,然后停止。
0/@/s/@/x/
0/@/s/@/x/
x