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)
您可以使用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在一行中找到,则替换classy为Vintage(再次\ b is for word boundaries,I is for case insensitive andg`用于全局搜索)