sed 修连接文件,有坑

在Linux环境中,使用sed命令 `-i` 选项直接修改文件时,可能会导致链接文件变为普通文件。要保留链接属性,需要在命令中加入特定参数。详细解决方法见文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

-bash-4.1# ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Aug 15  2014 /etc/rc.local -> rc.d/rc.local
-bash-4.1# cat /etc/rc.local 
#!/bin/sh
touch /var/lock/subsys/local
route add default gw 192.169.1.1
service iptables stop
echo "hosfore test line"
</pre><pre code_snippet_id="684937" snippet_file_name="blog_20150605_4_1032646" name="code" class="cpp" style="color: rgb(68, 68, 68);">-bash-4.1# sed -i "/hosfore/s//jane/" /etc/rc.local 
-bash-4.1# cat /etc/rc.local 
#!/bin/sh
touch /var/lock/subsys/local
route add default gw 192.169.1.1
service iptables stop
echo "jane test line"
</pre><pre code_snippet_id="684937" snippet_file_name="blog_20150605_6_4535175" name="code" class="cpp"><span style="color:#ff0000;">-bash-4.1# ll /etc/rc.local 
-rwxr-xr-x 1 root root 300 Jun  5 09:47 /etc/rc.local

-bash-4.1# cat /etc/rc.d/rc.local 
#!/bin/sh
touch /var/lock/subsys/local
route add default gw 192.169.1.1
service iptables stop
echo "hosfore test line"</span>
</pre><pre code_snippet_id="684937" snippet_file_name="blog_20150605_8_4167031" name="code" class="cpp">-bash-4.1# rm /etc/rc.local 
-bash-4.1# ln -s /etc/rc.d/rc.local /etc/rc.local
-bash-4.1# ll /etc/rc.local 
lrwxrwxrwx 1 root root 18 Jun  5 09:51 /etc/rc.local -> /etc/rc.d/rc.local
-bash-4.1# cat /etc/rc.local 
#!/bin/sh
touch /var/lock/subsys/local
route add default gw 192.169.1.1
service iptables stop
echo "hosfore test line" 
-bash-4.1# sed -i <strong>--follow-symlinks</strong> "/hosfore/s//jane/" /etc/rc.local
-bash-4.1# ll /etc/rc.local 
lrwxrwxrwx 1 root root 18 Jun  5 09:51 /etc/rc.local -> /etc/rc.d/rc.local
-bash-4.1# cat /etc/rc.d/rc.local 
#!/bin/sh
touch /var/lock/subsys/local
route add default gw 192.169.1.1
service iptables stop
echo "jane test line"

如上所示,使用“sed -i "/hosfore/s//jane/" /etc/rc.local ”命令修改文件之后,发现这个文件变成普通文件了 ,查询sed的使用手册,可知,如果需要保持软硬链接属性,修改的时候需要加上对应参数:

man sed

DESCRIPTION
       Sed  is  a  stream editor.  A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).  While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient.  But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.

       --follow-symlinks

            follow symlinks when processing in place; hard links will still be broken.

       -i [SUFFIX], --in-place[=SUFFIX]

            edit  files in place (makes backup if extension supplied).  The default operation mode is to break symbolic and hard links.  This can be changed with --follow-symlinks and --copy.

       -c, --copy

            use copy instead of rename when shuffling files in -i mode.  While this will avoid breaking links (symbolic or hard), the resulting editing operation is not atomic.  This is rarely the desired mode; --follow-symlinks is usually enough, and it is both faster and more secure.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值