我有这样的文件,
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
:pstmt.upload=y:\
如何找到xyz并在该行之前添加几行。所以文件看起来像这样,
abc@1234:\
:admin.id=XXX:\
:descrip=XXX:
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
这应该使用shell脚本更新。谁能在这帮助我?
答案 0 :(得分:2)
我会使用ed,而不是vim
$ cat file
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
:pstmt.upload=y:\
$ ed file <<'END_ED'
/xyz
i
abc@1234:\
:admin.id=XXX:\
:descrip=XXX:
.
w
q
END_ED
$ cat file
abc@1234:\
:admin.id=XXX:\
:descrip=XXX:
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
:pstmt.upload=y:\
答案 1 :(得分:0)
这个简单的编辑任务你不需要Vim。虽然它可以用于自动化,但我只会使用它,如果我绝对需要一个插件或自定义Vimscript来执行编辑任务。对于脚本,有更简单的工具。
以下是使用sed的解决方案:
current_url
$ cat > file <<'EOF'
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
:pstmt.upload=y:\
EOF
$ sed -i -e '/xyz:/i\
abc@1234:\\\
:admin.id=XXX:\\\
:descrip=XXX:\
' file
搜索($ cat file
abc@1234:\
:admin.id=XXX:\
:descrip=XXX:
xyz:\
:admin.auth=y:\
:cmd.stopndm=y:\
:pstmt.copy.ulimit=y:\
:pstmt.upload=y:\
)之前应该插入内容的行,然后首先通过/xyz:/
命令插入文本(反斜杠必须加倍,换行必须以1结尾)