Unix sed-i选项在solaris上不起作用
我正在使用sed将文件中的一行替换为NULL。我使用的命令是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 -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' '{}' \;