如何使用 sed 和 regex 查找并替换文件中存在的字符串?

如何使用 sed 和 regex 查找并替换文件中存在的字符串?

我有一个包含以下类型行的文件 -

find /home/subd1/subd2/$dirname -type d 
find /home1/subd1/subd2/$dirname -type d 
find /home10/subd1/subd2/$dirname -type d 

我想找到/home/or/home<no>/并将其替换为 DIFFERENT /home/or /home<no>/。基本上,查找并替换 -

/home with /home2 or
/home2 with /home3 or
/home3 with /home
etc.

我尝试做-

sed -i 's/\/home.?\//\/home3\//g' /path/to/file
sed -i 's/\/home[\d]?\//\/home3\//g' /path/to/file

但这并没有改变文件。我在这里错过了什么吗?谢谢

答案1

\d不支持sed。尝试使用[0-9]替代。

作为示例,我尝试了您提供的示例文件

find /home/subd1/subd2/$dirname -type d 
find /home1/subd1/subd2/$dirname -type d 
find /home10/subd1/subd2/$dirname -type d 

当给出时sed -i 's;/home[0-9]*/;/home3/;g' test.txt(用作;sed 分隔符,以便我不必转义每个/),文件被编辑为

find /home3/subd1/subd2/$dirname -type d 
find /home3/subd1/subd2/$dirname -type d 
find /home3/subd1/subd2/$dirname -type d 

值得注意的是,这将会改变每一个/home/和的实例/home<no>/为相同的新值(在本例中为/home3/)。我认为这是您的目标,但如果不是,您将需要不同的sed表达方式

相关内容