Unix sed-i选项在solaris上不起作用

Unix sed-i选项在solaris上不起作用,unix,sed,solaris,Unix,Sed,Solaris,我正在使用sed将文件中的一行替换为NULL。我使用的命令是 sed -i "s/.*shayam.*//g" FILE 这在linux中运行良好。shayam在文件中被替换为空白。但当我在solaris中使用它时,它显示出一些错误 sed:非法选项——i 如何在solaris中使用sed的-i功能。请提供帮助。或者cat文件,或者尝试该-i选项是特定于GNU的。Solaris版本不支持此选项 您需要安装GNU版本,或将新文件重命名为旧文件: sed 's/.shayam.//g' FILE

我正在使用sed将文件中的一行替换为NULL。我使用的命令是

sed -i "s/.*shayam.*//g" FILE
这在linux中运行良好。shayam在文件中被替换为空白。但当我在solaris中使用它时,它显示出一些错误

sed:非法选项——i


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

或者
cat
文件,或者尝试
-i
选项是特定于GNU的。Solaris版本不支持此选项

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

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

您可能正在使用特定于供应商的
sed
。如果要使用特定于供应商的非标准化版本的
sed
的特定于供应商的非标准化扩展,您需要确保安装上述特定于供应商的非标准化变体,并且需要确保调用它,而不是调用作为您操作环境一部分的符合标准的
sed

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

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


ed FILE我刚刚回答了一个类似的问题,但是对于那些找到这个线程的人(我在相关的线程部分看到了它):

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

它与sed-i并不完全相同,但我有一个类似的问题。你 可以使用perl执行此操作:

perl -pi -e 's/find/replace/g' file
仅对单个文件执行复制/移动操作。如果你想 在目录中的每个文件中替换一些文本,然后 子目录,你需要的东西,它做的地方。你能行 使用perl进行此操作并查找:

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

使用mktemp有助于确保我们不会无意中踩到任何名为FILE.new的文件。。。tmp=$(mktemp)和&sed-e's/*shayam.*//g'文件>“$tmp”和&mv“$tmp”文件;rm“$tmp”2>/dev/null
perl -pi -e 's/find/replace/g' file
find . -exec perl -pi -e 's/find/replace/g' '{}' \;