我想替换所有子目录中的所有文件中的单词,这些单词满足一些条件。
以下是详细说明的情况。
我必须替换所有具有不区分大小写的单词的Word {classy,CLASSY,cLassy,..}来说“Vintage”。我也只需要 将其替换为不区分大小写的单词“insert”或“INSERT”。
所以,如果我有2个文件低于内容。
File1.txt
asd asdsd INSERT asdasd classy
asddsdff sdf sdff sdf CLASSY
sfre asfert asdd asd insert asdgweg
qwe asfer wrererw werer wewer INSERT CLassy
File2.txt
fhfgh asdsd insert asdasd ClASSY
asddsdff dfg sdff sdf CLASSY
sdgg asfert dfg asd insert asdgweg CLASSY
qwe asfer wrererw werer wewer INSERT
我想将文件的内容更改为
File1.txt
asd asdsd INSERT asdasd Vintage
asddsdff sdf sdff sdf CLASSY
sfre asfert asdd asd insert asdgweg
qwe asfer wrererw werer wewer INSERT Vintage
File2.txt
fhfgh asdsd insert asdasd Vintage
asddsdff dfg sdff sdf CLASSY
sdgg asfert dfg asd insert asdgweg Vintage
qwe asfer wrererw werer wewer INSERT
以下是我使用的命令,但它运行不正常。你能帮我理解一下这个问题。
find /rootFolderPath -name "*.txt" | xargs grep -i insert -exec sed -i -e 'classy/Vintage/I' -- {} +
答案 0 :(得分:5)
您可以gnu-sed
使用find
作为:
cd /rootFolderPath
find . -name '*.txt' -exec \
sed -i '/\binsert\b/I{s/\bclassy\b/Vintage/gI;}' {} +
以下是sed
命令的作用:
-i
:内联编辑/\binsert\b/I
:在一行中搜索字符串insert
(对I
不区分大小写;对于字边界不区分{}} \b
:如果在一行中找到{s/\bclassy\b/Vintage/gI;}
,则将insert
替换为classy
(再次\ b Vintage
我is for word boundaries,
g`是全球搜索)