我有一个包含以下类型行的文件 -
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
表达方式