查找并替换所有文件中的单词,这符合Unix的搜索条件

Arp*_*pan 2 unix linux shell sed find

我想替换所有子目录中的所有文件中的单词,这满足一些条件.

以下是详细说明的情况.

我必须用{classy,CLASSY,cLassy,..}替换所有具有不区分大小写的单词到Word"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 
Run Code Online (Sandbox Code Playgroud)

我想将文件的内容更改为

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 
Run Code Online (Sandbox Code Playgroud)

下面是我使用的命令,但它不能正常工作.你能帮我理解一下这个问题.

find /rootFolderPath -name "*.txt" | xargs grep -i insert -exec sed -i -e 'classy/Vintage/I' -- {} +
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以使用gnu-sed具有find如下:

cd /rootFolderPath
find . -name '*.txt' -exec \
     sed -i '/\binsert\b/I{s/\bclassy\b/Vintage/gI;}' {} +
Run Code Online (Sandbox Code Playgroud)

这是sed命令的作用:

  • -i:内联编辑
  • /\binsert\b/I:搜索串insert在一条线上(不区分大小写的I,并\b为字边界)
  • {s/\bclassy\b/Vintage/gI;}:如果insert在一行中找到,则替换classyVintage(再次\ b is for word boundaries,I is for case insensitive andg`用于全局搜索)