sed -i选项不适用于solaris

时间:2010-11-08 06:27:17

标签: unix sed solaris

我使用sed替换文件中的NULL行。我使用的命令是

sed -i "s/.*shayam.*//g" FILE

这在linux中工作正常。 shayam在FILE中替换为空白。但是当我在solaris中使用它时,它显示出一些错误。

  

sed:非法选项 - 我

如何在solaris中使用sed的-i功能。请帮助。

4 个答案:

答案 0 :(得分:11)

-i选项是特定于GNU的。 Solaris版本不支持该选项。

您需要安装GNU版本,或者将旧文件重命名为旧文件:

sed 's/.shayam.//g' FILE > FILE.new && mv FILE.new FILE

答案 1 :(得分:11)

我刚回答了一个类似的问题sed -i + what the same option in SOLARIS,但对于那些找到这个帖子的人(我在相关的帖子部分看到了它):

我看到的最主要问题是,如果你想修改多个文件,它就不起作用了。我在另一个帖子中给出了答案:

  

它与sed -i不完全相同,但我遇到了类似的问题。您   可以使用perl执行此操作:

perl -pi -e 's/find/replace/g' file
     

执行复制/移动仅适用于单个文件。如果你想   替换目录中每个文件的一些文本   子目录,你需要一些适当的东西。你可以做   这与perl和find:

find . -exec perl -pi -e 's/find/replace/g' '{}' \;

答案 2 :(得分:3)

sed doesn't haven an -i option

您可能正在使用某些特定于供应商的sed变体。如果要使用特定于供应商的非标准化sed变体的特定于供应商的非标准化扩展,则需要确保安装所述特定于供应商的非标准化变体,并且需要确保您调用 it 并且不要调用属于您的操作环境的sed的符合标准的版本。

请注意,与使用非标准化的特定于供应商的扩展程序一样,绝对不能保证您的代码是可移植的,这正是您所看到的问题。

然而,在这种特殊情况下,有一个更好的解决方案:使用正确的工具来完成工作。 sed流编辑器(这就是称为“sed”的原因),即用于编辑流而不是文件。如果要编辑文件,请使用文件编辑器,例如ed

ed FILE <<-HERE
  ,s/.shayam.//g
  w
  q
HERE

另见:

答案 3 :(得分:0)

文件cat或尝试<? 然后将结果(|)传递给临时文件,如果一切顺利(&&mv临时文件到原始文件。

示例:

cat my_file | sed '!A!B!' > my_temp_file && mv my_temp_file my_file