我正在使用sed替换文件中的NULL行。我使用的命令是sed -i选项无法在solaris上工作
sed -i "s/.*shayam.*//g" FILE
这是在Linux工作正常。在FILE中,将shayam替换为空白。但是,当我在solaris中使用它时,它显示出一些错误。
sed的:非法选项 - 我
如何使用Solaris中的sed -i功能。请帮助。
我正在使用sed替换文件中的NULL行。我使用的命令是sed -i选项无法在solaris上工作
sed -i "s/.*shayam.*//g" FILE
这是在Linux工作正常。在FILE中,将shayam替换为空白。但是,当我在solaris中使用它时,它显示出一些错误。
sed的:非法选项 - 我
如何使用Solaris中的sed -i功能。请帮助。
的-i
选项是GNU特定的。 Solaris版本不支持该选项。
您需要安装GNU版本,或重命名新的文件覆盖旧的:
sed 's/.shayam.//g' FILE > FILE.new && mv FILE.new FILE
要么cat
该文件或尝试<
? 然后pipe(|
)将结果复制到临时文件,如果一切顺利(&&
)mv
tempfile到原始文件。
实施例:
cat my_file | sed '!A!B!' > my_temp_file && mv my_temp_file my_file
sed
doesn't haven an -i
option。
您可能正在使用sed
的某些供应商特定变体。如果您要使用特定于供应商的非标准化扩展模块sed
的供应商特定非标准化扩展,则需要确保安装了特定于供应商的非标准化变体,并且需要确保您致电它,并且不要调用作为您的操作环境一部分的sed
的符合标准的版本。
请注意,使用非标准化供应商特定扩展时,绝对不能保证您的代码是可移植的,这正是您所看到的问题。
然而,在这种特殊情况下,有一个更好的解决方案:使用正确的工具进行工作。 sed
是流编辑器(这就是为什么它是,称为“sed”),即它用于编辑流而不是文件。如果你想编辑文件,使用文件编辑器,如ed
:
ed FILE <<-HERE
,s/.shayam.//g
w
q
HERE
参见:
我刚才已经回答了类似的问题sed -i + what the same option in SOLARIS,但对于那些谁发现这个线程,而不是(我看到它在相关的线程部分):
我看到大多数答案给出的主要问题是,如果您想修改多个文件,它不起作用。我在另一个线程中给出的答案:
它与sed -i不完全相同,但是我有类似的问题。您 可以做到这一点用perl:
perl -pi -e 's/find/replace/g' file
做复制/移动仅适用于单个文件。如果您想 替换目录中的每个文件和 子目录中的某些文本,则需要一些适当的文本。你可以做到这 用Perl和发现:
find . -exec perl -pi -e 's/find/replace/g' '{}' \;
使用mktemp的帮助,以确保我们不会无意中上&& SED -e命名FILE.new ... TMP = $(mktemp的)任何文件步骤's /.* shayam。* // g'FILE>“$ tmp”&& mv“$ tmp”FILE; rm“$ tmp”2>/dev/null – 2015-11-26 04:47:14