有没有办法在 VScode 中满足某些搜索条件的文件中制作特别版(查找并替换一些字符串)
Is there a way to make special edition (find and replace some strings) in files meeting some search criteria in VScode
我几乎不是visual studio代码的高级用户。
我无法找到制作特别版的方法(例如:将字符串 'ABC' 更改为文本 'TEXT1 TEXT2'),仅在已经满足我想要的搜索条件的文件中。
我需要的使用示例:在所有包含字符串 '-FI-' 的文件中,将字符串 'ABC' 替换为字符串 'TEXT1 TEXT2'.
请问有 way/feature 吗?我在 Windows10 上安装了 VScode 1.37.1。我想要 运行 在 VScode 中的东西,在最坏的情况下,一些 linux 东西可能会有所帮助..
我已经进行了搜索,但没有找到任何帮助。例如,我尝试了如何在搜索和编辑中进行搜索。而且我没有足够的知识来使用正则表达式。
谢谢。
根据澄清意见,我将问题解释为:
- 如何在还包含字符串“-Fl-”的文件中将所有 "ABC" 实例替换为 "TEXT1 TEXT2",从给定目录开始并递归地考虑其下的所有文件?
我会使用 Cygwin shell 命令而不是 VSCode.
来解决这个问题
首先,让我们创建一个文件,其中包含所有包含字符串“-Fl-”的文件的名称。在bash
shell处,使用cd
进入感兴趣的目录,然后运行:
$ grep -l -r -- '-Fl-' . > files.txt
分解:
grep
在文件中搜索文本。
-l
开关打印文件名而不是匹配行。
-r
开关在子目录中递归搜索。
--
开关告诉grep
那是最后一个命令行选项,所以后面的词应该被视为参数(即要搜索的文本)。这是必要的,因为我们的搜索文本以 -
开头,否则将被视为一个选项。
-Fl-
是要搜索的文本(区分大小写;使用 -i
选项进行不区分大小写的搜索)。
.
是grep
查找的地方,意思是"current directory"(加上所有文件和子目录,递归,由于-r
)。
-
> files.txt
部分表示将结果写入 files.txt
。
在继续之前,在编辑器中打开 files.txt
或只是 cat
到终端以验证它对您来说是否合理:
$ cat files.txt
现在我们需要在此文件列表中进行搜索和替换。仅使用常用的 shell 命令并不容易,因此我编写了自己的脚本来执行此操作:
将其另存为名为 "replace-across-files" 的文件。我通常将此类内容放入 $HOME/scripts
,也称为 ~/scripts
,因此我假设您已完成相同的操作(如有必要,请先创建该目录)。
现在,回到有files.txt
和运行的目录:
perl ~/scripts/replace-across-files 'ABC' 'TEXT1 TEXT2' $(cat files.txt)
这将以交互方式提示您每次出现。使用 y
(或直接回车)分别接受每个文件,Y
接受当前文件中的所有文件,使用 !
进行所有替换。
如果得到perl: command not found
,则需要先安装Cygwin perl。
一个可能的陷阱:如果任何文件名包含 space,那么这将不起作用,因为 $(cat files.txt)
在白色 space 边界处拆分 files.txt
将内容放到命令行上。解决这个问题的一种方法是使用 xargs
代替:
$ cat files.txt | xargs -d '\n' perl ~/scripts/replace-across-files -f 'ABC' 'TEXT1 TEXT2'
分解:
cat files.txt |
将 files.txt
的内容作为输入提供给下一个命令 xargs
。
xargs
将其输入添加到给定的命令行并 运行s 它。
-d '\n'
告诉 xargs
在 newline 边界处划分其输入,而不是任何白色 space.
-f
告诉 replace-across-files
以非交互方式进行所有替换。这是必要的,因为根据 xargs
的工作方式,提示每次替换将不起作用。
我几乎不是visual studio代码的高级用户。 我无法找到制作特别版的方法(例如:将字符串 'ABC' 更改为文本 'TEXT1 TEXT2'),仅在已经满足我想要的搜索条件的文件中。 我需要的使用示例:在所有包含字符串 '-FI-' 的文件中,将字符串 'ABC' 替换为字符串 'TEXT1 TEXT2'.
请问有 way/feature 吗?我在 Windows10 上安装了 VScode 1.37.1。我想要 运行 在 VScode 中的东西,在最坏的情况下,一些 linux 东西可能会有所帮助..
我已经进行了搜索,但没有找到任何帮助。例如,我尝试了如何在搜索和编辑中进行搜索。而且我没有足够的知识来使用正则表达式。
谢谢。
根据澄清意见,我将问题解释为:
- 如何在还包含字符串“-Fl-”的文件中将所有 "ABC" 实例替换为 "TEXT1 TEXT2",从给定目录开始并递归地考虑其下的所有文件?
我会使用 Cygwin shell 命令而不是 VSCode.
来解决这个问题首先,让我们创建一个文件,其中包含所有包含字符串“-Fl-”的文件的名称。在bash
shell处,使用cd
进入感兴趣的目录,然后运行:
$ grep -l -r -- '-Fl-' . > files.txt
分解:
grep
在文件中搜索文本。-l
开关打印文件名而不是匹配行。-r
开关在子目录中递归搜索。--
开关告诉grep
那是最后一个命令行选项,所以后面的词应该被视为参数(即要搜索的文本)。这是必要的,因为我们的搜索文本以-
开头,否则将被视为一个选项。-Fl-
是要搜索的文本(区分大小写;使用-i
选项进行不区分大小写的搜索)。.
是grep
查找的地方,意思是"current directory"(加上所有文件和子目录,递归,由于-r
)。-
> files.txt
部分表示将结果写入files.txt
。
在继续之前,在编辑器中打开 files.txt
或只是 cat
到终端以验证它对您来说是否合理:
$ cat files.txt
现在我们需要在此文件列表中进行搜索和替换。仅使用常用的 shell 命令并不容易,因此我编写了自己的脚本来执行此操作:
将其另存为名为 "replace-across-files" 的文件。我通常将此类内容放入 $HOME/scripts
,也称为 ~/scripts
,因此我假设您已完成相同的操作(如有必要,请先创建该目录)。
现在,回到有files.txt
和运行的目录:
perl ~/scripts/replace-across-files 'ABC' 'TEXT1 TEXT2' $(cat files.txt)
这将以交互方式提示您每次出现。使用 y
(或直接回车)分别接受每个文件,Y
接受当前文件中的所有文件,使用 !
进行所有替换。
如果得到perl: command not found
,则需要先安装Cygwin perl。
一个可能的陷阱:如果任何文件名包含 space,那么这将不起作用,因为 $(cat files.txt)
在白色 space 边界处拆分 files.txt
将内容放到命令行上。解决这个问题的一种方法是使用 xargs
代替:
$ cat files.txt | xargs -d '\n' perl ~/scripts/replace-across-files -f 'ABC' 'TEXT1 TEXT2'
分解:
cat files.txt |
将files.txt
的内容作为输入提供给下一个命令xargs
。xargs
将其输入添加到给定的命令行并 运行s 它。-d '\n'
告诉xargs
在 newline 边界处划分其输入,而不是任何白色 space.-f
告诉replace-across-files
以非交互方式进行所有替换。这是必要的,因为根据xargs
的工作方式,提示每次替换将不起作用。