2010-08-26 69 views
22

我在UNIX的SolarisSED -i +什么SOLARIS

使用下面的sed命令从Solaris机器相同的选项

sed -i '$ s/OLD/NEW/g' test   
sed: illegal option -- i 

能有一个人有什么样的想法在Solaris中的非法选项(到位在linux“-i”选项,我需要在Solaris中具有相同效果的其它选项)

利迪娅

回答

17

你需要通过自己复制-i的行为将结果存储在临时文件中,然后用临时文件替换原始文件。这可能看起来不够雅致,但这一切都在sed -i之下。

sed '$ s/OLD/NEW/g' test > test.tmp && mv test.tmp test 

如果你愿意,你可以把它多一点健壮使用mktemp

TMP=$(mktemp test.XXXXXX) 
sed '$ s/OLD/NEW/g' test > "$TMP" && mv "$TMP" test 
+0

从AWK也许其他选项我不能将文件移动到其他文件 – lidia 2010-08-26 15:06:29

+0

“在地方”修改文件的任何命令实际上是这样做化妆复制MOVE-复制洗牌。除了某些特殊情况,您不能修改文件。如果'mv'不起作用,'cp'可能会。 – 2010-08-26 15:11:06

+1

你的命令也会修改修改文件的权限。 'sed -i'不会那样做。使用'cat'和'rm'代替'mv'可能会更好:'&& cat“$ TMP”> test && rm“$ TMP”'。 – ceving 2016-02-04 09:07:09

20

这是不完全一样的sed -i,但我也有类似的问题。您可以使用perl执行此操作:

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

执行复制/移动仅适用于单个文件。如果要替换目录中的每个文件和子目录中的某些文本,则需要一些适当的文本。你可以用Perl做到这一点,并找到:

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

最好的替代品。谢谢。 – woot 2014-07-02 05:34:31