当前位置: 首页>>技术问答>>正文


查找并替换多个文件中的文本

,

问题描述

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

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

最佳解决方案

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

find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;

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

find ./ -type f -readable -writable -exec sed -i "s/cybernetnews/cybernet/g" {} \;

次佳解决方案

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

sudo apt-get install jedit

启动jedit,单击搜索菜单项,在菜单列表中单击“在目录中搜索”项,您将看到以下对话框:

text-editor,ubuntu

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

第三种解决方案

另一个GUI选项是regexxer

text-editor,ubuntu

第四种方案

perl -pi -e 's/oldtext/newtext/g' *

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

第五种方案

检查Geany,它是Linux的完美NPP替代品。你可以做到这一点加上你可以使用正则表达式。

第六种方案

我为这件事写了一个小脚本。如果您只需要基础知识并且不熟悉sed等,请看一下:http://www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in-a-set-of-files/

该脚本如下:

for f in submit_*;
  do sed "s/old_db_name/new_db_name/" < $f > a_$f ;
  mv a_$f $f ;
done

第七种方案

您可以使用此脚本,复制代码并生成文件find_and_replace_in_files.sh

我修改了一下;请告诉我你的意见。

# *****************************************************************************************
# find_and_replace_in_files.sh
# This script does a recursive, case sensitive directory search and replace of files
# To make a case insensitive search replace, use the -i switch in the grep call
# uses a startdirectory parameter so that you can run it outside of specified directory - else this script will modify itself!
# *****************************************************************************************

!/bin/bash
# **************** Change Variables Here ************
startdirectory="/your/start/directory"
searchterm="test"
replaceterm="test=ok!"
# **********************************************************

echo "***************************************************"
echo "* Search and Replace in Files Version 01-Aug-2012 *"
echo "***************************************************"

i=0; 

  for file in $(grep -l -R $searchterm $startdirectory)
    do
      cp $file $file.bak
      sed -e "s/$searchterm/$replaceterm/ig" $file > tempfile.tmp
      mv tempfile.tmp $file

    let i++;

      echo "Modified: " $file
    done

echo " *** All Done! *** Modified files:" $i

第八种方案

另一个程序是Searchmonkey

SearchMonkey is a light-weight Gtk application that aims to replace the cumbersome find/grep with a slick user interface that quickly provides a mark-up showing locations and quantity of text matches. The goal is to provide a simple to use and accessible search tool for end-users, and software developers alike.

第九种方案

find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"

在fedora上为我工作

第十种方案

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

sed -i 's/string_1/string_2/g' *.txt

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1111.html,未经允许,请勿转载。