AIX | sed -i选项不适用于特定的行号

时间:2019-06-26 00:13:00

标签: shell aix

我想使用脚本在aix os中的特定行号上插入/删除一行。

我正在尝试使用以下代码

no2=103
dis=<disabled></disabled>
sed "${no2} a $dis" $node > vi.xml

到目前为止,我已经尝试了awk,可执行vi命令。什么都没有

错误输出如下:

server:/u/vwadhwa/MIMOnOffHold $ ./script.sh INTACTIX_TO_NDW_ITX007 stop
Performing stop action on dirmon-INTACTIX_TO_NDW_ITX007 which is present in node-IKBNODE01.xml
sed: Not a recognized flag: i
Usage:  sed [-n] [-u] Script [File ...]
        sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]

2 个答案:

答案 0 :(得分:1)

这种通过在特定行插入文本来对文件进行就地编辑的方法,对于ed来说是一个很好的用例(我假设AIX拥有)。

要在行$no2之前插入新行(使新行$no2;使用a在该行之后插入):

ed -s "$node" <<EOF
$no2 i
$dis
.
w
q
EOF

并删除第$no2行:

ed -s "$node" <<EOF
$no2 d
w
q
EOF

尽管您似乎正在使用XML,这意味着了解XML的工具将是一个更好的选择-如果文件发生更改,导致在第103行盲目添加标签会导致该标签无效,那该怎么办?

答案 1 :(得分:0)

不能完全确定您要问的内容,但是如果您只想插入新行,则可以使用类似这样的方法,其中$dis是您要插入的行:

perl -pe "s/^/$dis\n/ if \$. == $line_number" input_file > output_file

您还可以使用-i标志在适当位置编辑文件:

perl -i -pe "s/^/$dis\n/ if \$. == $line_number" input_file