我使用sed替换文件中的NULL行。我使用的命令是
sed -i "s/.*shayam.*//g" FILE
这在linux中工作正常。 shayam在FILE中替换为空白。但是当我在solaris中使用它时,它显示出一些错误。
sed:非法选项 - 我
如何在solaris中使用sed的-i功能。请帮助。
答案 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