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

raj*_*eev 7 aix sed

请问sed -i在AIX上运行?

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

Jon*_*ler 13

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

您无法直接在AIX上进行原位编辑.你必须做相当于:

sed 's/this/that/' infile > tmp.$$
mv tmp.$$ infile
Run Code Online (Sandbox Code Playgroud)

您一次只能处理一个文件,而该-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
Run Code Online (Sandbox Code Playgroud)

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

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

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

您可以overwrite在他们的经典书籍"UNIX编程环境"中查找Kernighan和Pike描述的(shell)命令.