艾克斯 | sed -i 选项不适用于特定的行号
Posted
技术标签:
【中文标题】艾克斯 | sed -i 选项不适用于特定的行号【英文标题】:AIX | sed -i option not working for the specific line number 【发布时间】:2019-11-07 20:27:27 【问题描述】:我想使用脚本在 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 ...]
【问题讨论】:
-i
不是 posix 选项,显然不是由 aix 的 sed 实现的。
【参考方案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 行盲目添加标签导致其无效怎么办?
【讨论】:
这里的“$node”是什么? @VinitaWadhwani$node
是什么?大概是一个文件名;至少,您在问题中就是这样使用它的。
看看我尝试了什么,如果我做错了,请告诉我。 laq9esbpt225:/u/qmima20/MIMOnOffHold $ node=vini.txt laq9esbpt225:/u/qmima20/MIMOnOffHold $ ed -s "$node" <<EOF > 2 i > VINITAAAAA > w > q > EOF laq9esbpt225:/u/qmima20/MIMOnOffHold $ cat vini.txt vini vinita vinitaaa vani
@VinitaWadhwani 这是一个难以理解的混乱。评论不是看起来像是多行复制和粘贴的地方。【参考方案2】:
不完全确定你在问什么,但如果你只是想插入一个新行,你可以使用这样的东西,$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
【讨论】:
根本不起作用``` laq9esbpt225:/u/qmima20/MIMOnOffHold $ dis=cini laq9esbpt225:/u/qmima20/MIMOnOffHold $ line_number=5 laq9esbpt225:/u/qmima20/MIMOnOffHold $ perl -i -pe "s/^/$dis\n/ if \$. == $line_number" vini.txt laq9esbpt225:/u/qmima20/MIMOnOffHold $ cat vini.txt vini vinita vinitaaa vani ``` 您的文件中只有 4 行,但您指定了第 5 行? 以什么方式?您可以像添加任何其他命令一样将其添加到 shell 脚本中以上是关于艾克斯 | sed -i 选项不适用于特定的行号的主要内容,如果未能解决你的问题,请参考以下文章