我正在尝试使用 Vi 或 ex 执行命令以通过删除前五行来编辑文件,替换x
为y
,删除每行末尾的多余空格但保留回车符,并删除文件的最后八行,然后将文件重命名为 shell 脚本并从当前脚本运行新脚本。
这将是在 cron 中安排的。我一直在寻找一种使用命令行或 Vim 脚本或其他东西的简单方法。
有任何想法吗?输入文件的格式没有变化,只是行数,所以我不能指定最后八行的行号。
您实际上在这里有大约六个问题。这是前五个的答案,这可能是您最难解决的问题:
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
更便携。
此外,final| sh
只是运行输出。如果你真的想把它保存为脚本,你可以通过将输出重定向到一个文件来做到这一点......但我至少会让你想象一下。不能为您编写所有脚本,可以吗?!:-)
要通过脚本编辑文件,您可以使用ed
(即使很难学习或记住)。
您还可以使用一些脚本语言(Python、Perl、AWK、Ruby)来实现您的目标。