Vim 使用Linux shell脚本编辑和重命名文件

Vim 使用Linux shell脚本编辑和重命名文件,vim,vi,ex,ed,Vim,Vi,Ex,Ed,我试图使用Vi或ex执行命令,通过删除前五行来编辑文件,将x替换为y,删除每行末尾的额外空格,但保留carraige返回,并删除文件的最后八行,然后将文件重命名为shell脚本,并从当前脚本运行新脚本 这将是在cron中计划的内容。我一直在寻找一种简单的方法来使用命令行或Vim脚本或其他东西来完成它 有什么想法吗?输入文件的格式不变,只是行数不变,因此我无法指定最后八行的行号。要通过脚本编辑文件,可以使用ed(即使很难学习或记忆) 您还可以使用一些脚本语言(Python、Perl、AWK、Rub

我试图使用Vi或ex执行命令,通过删除前五行来编辑文件,将
x
替换为
y
,删除每行末尾的额外空格,但保留carraige返回,并删除文件的最后八行,然后将文件重命名为shell脚本,并从当前脚本运行新脚本

这将是在cron中计划的内容。我一直在寻找一种简单的方法来使用命令行或Vim脚本或其他东西来完成它


有什么想法吗?输入文件的格式不变,只是行数不变,因此我无法指定最后八行的行号。

要通过脚本编辑文件,可以使用
ed
(即使很难学习或记忆)


您还可以使用一些脚本语言(Python、Perl、AWK、Ruby)来实现您的目标。

这里实际上有六个问题。以下是前五个问题的答案,这可能是你最难解决的问题:

sed -e ':label' -n -e '1d' -e 's/x/y/g' -e 's/[ \t]*$//g' -e '1,9!{P;N;D};N;b label' file.txt > script.sh

Vi是一个交互式编辑器。您可能不想将它用于将由cron运行的东西。此外,我同意有评论说这可能是个坏主意。尽管如此:

printf 'one\ntwo\nthree\nfour\nfive\necho x \n1\n2\n3\n4\n5\n6\n7\n8\n' \
| sed '1,5d;s/  *$//;s/x/y/' \
| tail -r | sed 1,8d | tail -r \
| sh
我们的第一个sed脚本完成了大部分工作。我们使用
tail-r
反转行,然后删除前8行,然后再次反转。这就删掉了最后8行

请注意,在Linux系统(或任何带有GNU coreutils的系统)上,您也可能有一个
tac
命令来反转行,但是
tail-r
更便于移植


此外,最终的
|sh
只运行输出。如果您真的想将其保存为脚本,您可以通过将输出重定向到一个文件。。。但我至少会让你想象一下。我们不能为您编写所有脚本,对吗?!:-)

你知道这听起来是个坏主意,对吧?也许您确实需要执行您所描述的操作,但这听起来非常脆弱,调试您所描述的过程将非常不有趣。可以使用HERE文档编写脚本
ex
。并非所有的
ex
s响应都完全相同,您需要进行实验,如果您更改操作系统,不进行修补,它可能无法工作。不像上面提到的那样有趣和脆弱。祝你好运。有时这些障碍课程问题会变成家庭作业。谢谢你的帮助。这就是我要做的。ex-c“%s/No Database Reference/rm-f/g”-c“1,5d”-c$-cd-c wq/home/gisadmin/DoDRM.sh ex-c$-cd-cd-cd-c wq/home/gisadmin/DoDRM.sh ex-c$-cd-cd-c wq/home/gisadmin/DoDRM.sh