在多个文件中查找和替换文本

Far*_*zun 101 text-editor

我想知道如何在链接教程中的 Notepad++ 等多个文件中查找和替换特定文本。

例如:http : //cybernetnews.com/find-replace-multiple-files/

小智 160

在这里,我使用 sed 将目录 /home/user/directory/ 中每个扩展名为 c 的文件中出现的单词“cybernetnews”替换为“cybernet”。

find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
Run Code Online (Sandbox Code Playgroud)

一种更通用的变体,您可以从执行目录递归搜索并仅对常规、可读、可写的文件进行操作:

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;
Run Code Online (Sandbox Code Playgroud)

  • @sequoiamcdowell 哇!我错过了这个!对不起。大括号的意思基本上是“针对每个匹配项”,转义的分号 (\;) 是为了防止双重解析。我们不希望与 bourne 兼容的 shell 和 sed 试图解析命令,只需要 sed。 (5认同)
  • 投票是因为 sed 是 IMO 的最佳选择,但是如果您解释了答案的组成部分,答案会更有用(就个人而言,我对 {} \; 不熟悉和好奇) (4认同)
  • 投赞成票是因为这是一种有效的方法 (2认同)

Sab*_*con 31

流编辑器 sed 是此类工作的强大实用程序,是我的首选,但是,如果您想使用基于 Ubuntu 的本机应用程序从普通文本编辑器执行此操作,我建议您查看 Jedit , 它在存储库中可用,可以通过在控制台中键入来安装:

sudo apt-get install jedit
Run Code Online (Sandbox Code Playgroud)

启动jedit,点击搜索菜单项,在菜单列表中,点击在目录中搜索项,会出现如下对话框:

Jedit 在文件夹中搜索对话框

这类似于 Notepad++ 并且做同样的事情,我相信这就是你想要的。


int*_*_ua 20

另一个 GUI 选项是regexxer正则表达式截图


Mic*_*l K 13

perl -pi -e 's/oldtext/newtext/g' *
Run Code Online (Sandbox Code Playgroud)

用新文本替换当前文件夹中所有文件中出现的任何旧文本。但是,您必须使用反斜杠转义 oldtext 和 newtext 中的所有 perl 特殊字符。


Ste*_*goo 9

检查Geany,它是 Linux 的完美 NPP 替代品。您可以完全做到这一点,此外还可以使用正则表达式。


小智 7

一个非常简单的解决方案:将*.txt文件夹中的所有文件替换string_1string_2

sed -i 's/string_1/string_2/g' *.txt
Run Code Online (Sandbox Code Playgroud)