LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: goodma

用sed替换文件内文本问题

[复制链接]
发表于 2006-8-30 16:09:10 | 显示全部楼层
第一,可以用个循环,第二,你是什么版本的sed,某些老版本的sed会忽略最后一个newline字符后的内容,但现在的GNU sed不会。
回复 支持 反对

使用道具 举报

发表于 2006-8-30 16:44:42 | 显示全部楼层
#!/bin/sed -f
#filename: replace.sed

#Usage: ./replace.sed file1 ... fileN
#Before use the script file, please do
#  $ chmod +x replace.sed
#first.

for i in $@
do
   sed -e 's/account1/account2/g' $i > $i.$$;
   mv $i.$$ $i;
done
#end sed script
#不知道这样可不可以,我没调试,你们可以试试看 ^_^
回复 支持 反对

使用道具 举报

发表于 2006-8-30 16:50:09 | 显示全部楼层
你这个脚本不用`#!/bin/sed -f'作为shebang,而是用#!/bin/sh
回复 支持 反对

使用道具 举报

发表于 2006-8-30 21:27:51 | 显示全部楼层
嗯嗯,发现这个问题了,是我写错了,谢谢提醒。
以下脚本经过测试,没问题的:

#!/bin/sh
#filename: replace

#Usage: ./replace  file1 ... fileN
#Before use the script file, please do
# $ chmod +x replace
#first.
if [ $# -eq 0 ] ; then
echo "Usage: ./replace file1 .. fileN";
exit 1;
fi

for i in $@
do
sed -e 's/account1/account2/g' $i > $i.$$;
mv $i.$$ $i;
done
#end sed script
回复 支持 反对

使用道具 举报

发表于 2006-8-31 11:03:08 | 显示全部楼层
另类用法:sed -e 's/account1/account2/g' file 1<>file
如有意外恕不负责
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-1 11:16:53 | 显示全部楼层
楼上的命令替换是替换了,但是却多了个字符
不过看上去蛮有意思的,呵呵,不知道这个命令是怎么解释的?
回复 支持 反对

使用道具 举报

发表于 2006-9-5 10:01:12 | 显示全部楼层
请问楼上如何测试的?能否提供实例。正愁找不到反例呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-6 15:45:56 | 显示全部楼层
上次测试的文件被我删除了,确实有新增一行的情况,刚才新建了个文件测试了下,发现又是对的,不过如果文件结尾处有个换行符的话,替换之后文件尾会多出两个换行符
看上去还是有隐患,不敢用,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表