我想知道如何在多个文件中查找和替换特定文本,例如链接教程中的Notepad ++。
我想知道如何在多个文件中查找和替换特定文本,例如链接教程中的Notepad ++。
Answers:
在这里,我使用sed在目录/ home / user / directory /中以扩展名c替换每个文件中每次出现的“ cybernetnews”,并将其替换为“ cybernet”。
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" {} \;
cyber net news
?我如何将其转换为cyber net
?
流编辑器sed是用于此类工作的强大实用程序,是我的首选,但是,如果要使用基于Ubuntu的本机应用程序通过普通文本编辑器执行此操作,建议您看一下Jedit ,它在存储库中可用,可以通过在控制台中键入来安装:
sudo apt-get install jedit
启动jedit,单击搜索菜单项,在菜单列表中,单击“在目录中搜索”项,将显示以下对话框:
这与Notepad ++类似,并且执行相同的操作,我相信这是您想要的。
sed
。
另一个GUI选项是regexxer:
与Geany一起检查,它是Linux的完美NPP替代品。您可以做到这一点,再加上可以使用正则表达式。
我为此写了一个小脚本。如果您只需要基本知识而又不熟悉sed等,请在此处查看:http : //www.csrdu.org/nauman/2010/12/30/bash-script-to-find-and-replace-in一组文件/
脚本如下:
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是一个轻量级的Gtk应用程序,旨在用一个光滑的用户界面来代替繁琐的查找/ grep,该用户界面可快速提供标记,以显示文本匹配的位置和数量。目标是为最终用户和软件开发人员提供一种易于使用且易于访问的搜索工具。
find . -name "*.txt" |xargs sed -i "s/searched_Text/replacement_Text/g"
在fedora上为我工作
sed
实例!因此,就CPU时间而言,它要快得多。因为文件访问时间是有限制的,所以我认为它的时钟时间并没有快很多,但是却降低了系统负载。注意,xargs
将在单个sed
命令的命令行上放置很多文件名,例如杂乱无章的文件名-根据路径的长度填充可用的缓冲区大小。
+
代替\;
in 实现find
,对吗?
xargs
,但您是对的。来自man find
:-exec command {} +
:... The command line is built in much the same way that xargs...
。让我想到git filter-branch
…… 的命令行;)