Visual studio code 在VScode中,有没有办法在满足某些搜索条件的文件中制作特别版(查找并替换某些字符串)
我几乎不是VisualStudio代码的高级用户。 我无法设法在已经满足我所需搜索条件的文件中制作特别版(例如:用文本“TEXT1 TEXT2”更改字符串“ABC”)。 我需要的使用示例:在包含字符串“-FI-”的所有文件中,将字符串“ABC”替换为字符串“TEXT1 TEXT2” 有什么方法/功能可以做到吗?我在Windows10上安装了VScode 1.37.1。我想要一些可以在VScode中运行的东西,在最坏的情况下可能需要一些linux的东西来帮助 我已经搜索过了,没有发现任何有用的东西。例如,我尝试了如何在搜索和编辑中进行搜索。我没有足够的知识来使用正则表达式Visual studio code 在VScode中,有没有办法在满足某些搜索条件的文件中制作特别版(查找并替换某些字符串),visual-studio-code,ide,development-environment,Visual Studio Code,Ide,Development Environment,我几乎不是VisualStudio代码的高级用户。 我无法设法在已经满足我所需搜索条件的文件中制作特别版(例如:用文本“TEXT1 TEXT2”更改字符串“ABC”)。 我需要的使用示例:在包含字符串“-FI-”的所有文件中,将字符串“ABC”替换为字符串“TEXT1 TEXT2” 有什么方法/功能可以做到吗?我在Windows10上安装了VScode 1.37.1。我想要一些可以在VScode中运行的东西,在最坏的情况下可能需要一些linux的东西来帮助 我已经搜索过了,没有发现任何有用的东西
谢谢。根据澄清意见,我将问题解释为:
- 我如何在包含字符串“-Fl-”的文件中用“TEXT1 TEXT2”替换“ABC”的所有实例,从给定目录开始,递归地考虑其下的所有文件
bash
shell中,使用cd
转到感兴趣的目录,然后运行:
$ grep -l -r -- '-Fl-' . > files.txt
分解如下:
- 在文件中搜索文本
开关打印文件名,而不是匹配行-l
开关在子目录中递归搜索-r
开关告诉--
这是最后一个命令行选项,因此后面的单词应被视为参数(即要搜索的文本)。这是必要的,因为我们的搜索文本以grep
开头,因此将被视为一个选项-
是要搜索的文本(区分大小写;使用-Fl-
选项进行不区分大小写的搜索)-i
是
进行搜索的地方,意思是“当前目录”(加上所有文件和子目录,由于grep
而递归)-r
部分要求将结果写入>files.txt
files.txt
files.txt
,或直接将其发送到终端,以验证其是否合理:
$ cat files.txt
现在我们需要在这个文件列表中进行搜索和替换。仅使用stock shell命令并不容易做到这一点,因此我编写了自己的脚本来实现这一点:
$HOME/scripts
,也称为~/scripts
,因此我假设您也这样做了(如果需要,请先创建该目录)
现在,返回包含files.txt的目录并运行:
perl ~/scripts/replace-across-files 'ABC' 'TEXT1 TEXT2' $(cat files.txt)
这将以交互方式提示您每次出现。使用y
(或只需输入)分别接受每个文件,y
接受当前文件中的所有文件,代码>以进行所有替换
如果您得到perl:command not found
,则需要首先安装Cygwin
一个可能的问题是:如果任何文件名包含空格,那么这将不起作用,因为$(cat files.txt)
在将内容放入命令行之前,会在空格边界处拆分files.txt
。解决此问题的一种方法是使用:
分解如下:
cat files.txt
将files.txt
的内容作为其输入提供给下一个命令xargs
xargs
将其输入添加到给定的命令行并运行它
-d'\n'
告诉xargs
在换行符边界分割输入,而不是任何空格
-f
告诉跨文件替换
以非交互方式执行所有替换。这是必要的,因为由于xargs
的工作方式,每次更换的提示都不起作用
当您说“在所有包含字符串'-FI-'的文件中”,您的意思是字符串出现在文件名或文件内容中吗?我的意思是出现在文件内容中。在这种情况下,VSCode本身无法做到这一点。你看过可用的吗?另外,您是否只对在VSCode内部工作的解决方案感兴趣,还是可以使用完全独立于VSCode的命令行?如果是这样,基于的解决方案是否可以接受,或者它必须只使用cmd.exe
或Powershell吗?我没有看到扩展,是的,Cygwin的某些功能可以帮助您,我已经安装了它,但我不是Linux专家。谢谢你的回答,这正是我需要的。
$ cat files.txt | xargs -d '\n' perl ~/scripts/replace-across-files -f 'ABC' 'TEXT1 TEXT2'