在SUSE linux上执行sed命令报“段错误是什么原因,怎样解决

source0 2010-02-09 10:11:28
操作系统版本信息:
linux:~ # uname -a
Linux linux 2.6.5-7.308-bigsmp #1 SMP Mon Dec 10 11:36:40 UTC 2007 i686 i686 i386 GNU/Linux

linux:~ # cat /proc/version
Linux version 2.6.5-7.308-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 10 11:36:40 UTC 2007

linux:~ # lsb_release -a
LSB Version: core-2.0-noarch:core-3.0-noarch:core-2.0-ia32:core-3.0-ia32:graphics-2.0-ia32:graphics-2.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: SUSE LINUX
Description: SUSE LINUX Enterprise Server 9 (i586)
Release: 9
Codename: n/a


以 root 用户执行下面的命令之一:
sed 's/connect *system/--connect system/ig' abc.sql > 123.sql
sed -i 's/connect *system/--connect system/ig' abc.sql
命令执行时报“段错误”,观察生成的文件发现内容不全,应该是执行到一半就报错退出了。
如果换用其它用户就不报错。
...全文
228 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
source0 2010-02-10
  • 打赏
  • 举报
回复
明天要回家过年了,如果今天还找不到原因的话,就结贴给大家散分,等年后再开帖子。
source0 2010-02-10
  • 打赏
  • 举报
回复
引用 13 楼 liucy1983 的回复:
现在SED的RPM版本是4.1.5,升级一下试试


版本是不能变更的,包括操作系统和数据库。增、删、改软件等都是不可以的。
source0 2010-02-09
  • 打赏
  • 举报
回复
出错可能是跟文件大小有关系,只有几KB的小文件没发现出错,但是几十KB以上就肯定出错。

但是这个大小也是不固定的。这几次测试用的源文件都是同一个360KB的文件。有区别的就是 sed 命令里面的字符串,像下面2个生成的文件长度就不一样:

sed 's/connect *zx/--connect zx/ig' abc.sql > 123.sql 生成文件大小是61440
sed 's/connect *system/--connect system/ig' abc.sql > 123.sql 生成文件大小是 8192

最早发现问题的时候生成的文件大小是36KB左右,至于是不是1024的整数倍,当时没计算,也不记得当时 sed 命令里面具体的写法了。
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
例如
touch test
echo "aabb" >test
sed -i 's/bb/ecc/g' test
cat test
看结果是什么,如果没问题再写
sed -i 's/.*e/connect system/g' test
cat test
看是什么状况,如果没问题再写
sed -i 's/connect *system/--connect system/ig' test
cat test

另外就是你可以对比一下看结果中是进行到那行就出错,看源文件中出错的那行是什么内容
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
尝试建一个小文件,然后用SED做一下简单的操作会报错吗
steptodream 2010-02-09
  • 打赏
  • 举报
回复
好奇怪的问题

普通用户不报错 root用户就报错

你试着把sed内的特殊符号前面加\试试 比如你的* -
source0 2010-02-09
  • 打赏
  • 举报
回复
root 用户执行:
# sed 's/connect *system/--connect system/ig' abc.sql > 123.sql
段错误
# sed -i 's/connect *system/--connect system/ig' abc.sql
段错误

原始文件有几百KB到几MB大,但是出错的时候生成的文件最多都只有几十KB,甚至只有几KB。

同一个文件,换成 oracle 用户(这是台装了Oracle9的数据库服务器)执行上述2行命令没有任何问题,并且处理结果和预期一样。
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
报操作的具体过程和报错发上来一下
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
现在SED的RPM版本是4.1.5,升级一下试试
source0 2010-02-09
  • 打赏
  • 举报
回复
看了一下,没发现 sed 命令被其它程序替换。使用 man sed 查到的版本信息为:
sed version 4.0.9 June 2004

sed 出错只跟文件大小有关,文件大了就会出错。至于到底在哪里出错,则是和 sed 命令里面搜索的字符串有关,字符串不同出错的地方也不同,和被搜索的文件的具体内容没有关系。不过实际上被搜索到的字符串通常都在文件开头的几行里面,对文件剩余部分的搜索应该不会有什么具体操作才对。
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
你说的大文件一直都是你那个abc.sql,有试过别的大文件吗?
还有就是,确定一下它在执行到那一行出的错,看那行是什么内容
steptodream 2010-02-09
  • 打赏
  • 举报
回复
引用 9 楼 source0 的回复:
需要说明一下,我在很多机器上都做过测试,这些机器有的是PC机,有的是服务器,操作系统都是SuSE9,数据库都是Oracle9i。目前出问题的就那一台。

现在极度怀疑当初装机器的人是不是多装或者少装了什么补丁,或者乱改了什么配置。

莫非 原来的人把sed用别的版本的sed命令替换了?
你看看root目录下的.bashrc或者.bash_profile确认一下 root用户是否用别的命令替代了sed
(这中可能性小,纯属瞎猜)
source0 2010-02-09
  • 打赏
  • 举报
回复
需要说明一下,我在很多机器上都做过测试,这些机器有的是PC机,有的是服务器,操作系统都是SuSE9,数据库都是Oracle9i。目前出问题的就那一台。

现在极度怀疑当初装机器的人是不是多装或者少装了什么补丁,或者乱改了什么配置。
source0 2010-02-09
  • 打赏
  • 举报
回复
引用 7 楼 liucy1983 的回复:
1.你的问题现在能重现吗?
2.是你现在能操作的机器吗?
3.你说当时SED写法忘了,意思是就是那个写法才出错还是随便一种写法才出现?
4.可以在你的问题环境里做一下我上面说的东西吗?


到目前为止都是在对同一个文件进行的测试,在同一台机器上。如果机器有变化的话我会把新的操作系统版本信息附上的。唯一有区别的就是 sed 里面的具体写法,从上面我给出的2行命令能看出来区别只是检索字符串的后半部分,一个是检索 zx ,一个是检索 system 。如果换成其它的,那么生成的文件长度也会发生变化。

只要文件不大,执行什么命令都是没问题的,包括你写的那部分。反之,像下面这么简单的都是一样的错误:
sed 's/a/b/ig' abc.sql > 123.sql
liucy1983 2010-02-09
  • 打赏
  • 举报
回复
1.你的问题现在能重现吗?
2.是你现在能操作的机器吗?
3.你说当时SED写法忘了,意思是就是那个写法才出错还是随便一种写法才出现?
4.可以在你的问题环境里做一下我上面说的东西吗?

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧