Bash 使用exec vi时出错 使用sed
如果我理解正确,您希望在文件开头添加两行。在这种情况下,按照Cyrus的建议,运行:Bash 使用exec vi时出错 使用sed,bash,shell,scripting,vi,heredoc,Bash,Shell,Scripting,Vi,Heredoc,如果我理解正确,您希望在文件开头添加两行。在这种情况下,按照Cyrus的建议,运行: Vim(?):Warning: Input is not from a terminal Vim: Error reading input, exiting... Press ENTER or type command to continueVim: Finished. Vim: Error reading input, exiting... Vim: Finished. 注: 使用shell变量时,除非
Vim(?):Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Press ENTER or type command to continueVim: Finished.
Vim: Error reading input, exiting...
Vim: Finished.
注:
if
语句应包含一个exit
,以防止在未提供参数的情况下运行脚本的其余部分。在上面,我们添加了exit 1
,它将exit code设置为1以表示错误vi
让我们从这个测试文件开始:
#!/bin/bash
if [ $# -ne 1 ]
then
echo "USAGE:vitest filename"
exit 1
fi
sed -i.bak '1 s/^/line1\nline2\n/' "$1"
现在,让我们运行vi
,然后查看文件中的内容:
$ cat File
some line
$vi-s使用cat
$ vi -s <(echo $'iline1\nline2\n\eZZ') File
$ cat File
line1
line2
some line
正如建议的那样,ed
$ cat file1.txt file2.txt | tee file3.txt
Line 1
Line 2
aaaa
bbbb
cccc
您希望在ex
模式下启动vi
,只需对脚本进行一些小的更改
printf "%s\n" 1i "line1" "line2" . wq | ed file
vi-e“$FILENAME”我建议使用sed
。不是sed
,而是ed
或ex
。使用cat
这就是它的用途。我会使用你的建议,但我必须使用exec vi。请注意,如果使用exec
,则永远不会到达以下退出0
。你确定你需要的是exec vi
而不是vi
?谢谢你的提示。我对脚本编写相当陌生,所以这些都非常有价值。有没有办法在这种情况下使用exec vi?@EstebanRodriguez OK。我添加了一个<代码> vi >代码>解决方案。@ Jeang1024,SED的命令不仅仅是代码> S///< /代码>:考虑<代码> I/Cuth>命令插入行。许多<代码> ED < /C>命令对代码> VI>代码>用户非常熟悉:谢谢,Excel解释非常有用。
ed file << END
1i
line1
line2
.
wq
END
printf "%s\n" 1i "line1" "line2" . wq | ed file
vi -e "$FILENAME" <<EOF
i
Line 1.
Line 2.
.
wq
EOF