AIX上的Sed无法识别-i标志

时间:2011-08-29 16:16:24

标签: sed aix

sed -i是否适用于AIX?

如果没有,我如何在AIX上“就地”编辑文件?

6 个答案:

答案 0 :(得分:13)

-i选项是sed命令的GNU(非标准)扩展。它不是sed的经典界面的一部分。

您无法直接在AIX上进行原位编辑。你必须做相同的:

sed 's/this/that/' infile > tmp.$$
mv tmp.$$ infile

您一次只能处理一个文件,而-i选项允许您为其参数列表中的每个文件实现结果。 -i选项只是打包这一系列事件。它无疑是有用的,但它不是标准的。

如果你编写脚本,你需要考虑如果命令被中断会发生什么;特别是,你不想留下临时文件。这导致了类似的事情:

tmp=tmp.$$      # Or an alternative mechanism for generating a temporary file name
for file in "$@"
do
    trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
    sed 's/this/that/' $file > $tmp
    trap "" 0 1 2 3 13 15
    mv $tmp $file
done

如果在sed运行时发生信号(HUP,INT,QUIT,PIPE或TERM),则会删除临时文件。 sed完成后,它会在mv发生时忽略信号。

您仍然可以通过在与源文件相同的目录中创建临时文件等操作来增强此功能,而不是将文件放在完全不同的文件系统中。

另一个增强功能是允许在命令行上指定命令(示例中为sed 's/this/that')。这变得更棘手!

您可以在他们的经典书籍'The UNIX Programming Environment'中查找Kernighan和Pike描述的overwrite(shell)命令。

答案 1 :(得分:1)

您只需在AIX上安装GNU版本的Unix命令:

http://www-03.ibm.com/systems/power/software/aix/linux/toolbox/alpha.html

答案 2 :(得分:1)

#!/bin/ksh
host_name=$1
perl -pi -e "s/#workerid#/$host_name/g" test.conf 

上面会将#workerid#替换为test.conf中的$ host_name

答案 3 :(得分:0)

您可以在vi中使用此处构造:

vi file >/dev/null 2>&1 <<@
:1,$ s/old/new/g
:wq
@

如果你想在vi-edit模式下做事,你需要一个ESC 对于ESC新闻CTRL-V ESC 当您在非交互模式下使用它时,vi可以抱怨未设置TERM。解决方案是在调用vi之前添加export TERM=vt100

答案 4 :(得分:0)

另一个选择是使用好的旧版本,如下所示:

ed fileToModify <<EOF
,s/^ff/gg/
w
q
EOF

答案 5 :(得分:0)

您可以使用perl来执行此操作:

perl -p -i.bak -e 's/old/new/g' test.txt

将创建一个.bak文件。