1

我正在尝试使用 Vi 或 ex 执行命令以通过删除前五行来编辑文件,替换xy,删除每行末尾的多余空格但保留回车符,并删除文件的最后八行,然后将文件重命名为 shell 脚本并从当前脚本运行新脚本。

这将是在 cron 中安排的。我一直在寻找一种使用命令行或 Vim 脚本或其他东西的简单方法。

有任何想法吗?输入文件的格式没有变化,只是行数,所以我不能指定最后八行的行号。

4

3 回答 3

1

您实际上在这里有大约六个问题。这是前五个的答案,这可能是您最难解决的问题:

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
于 2012-08-30T00:26:18.477 回答
1

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只是运行输出。如果你真的想把它保存为脚本,你可以通过将输出重定向到一个文件来做到这一点......但我至少会让你想象一下。不能为您编写所有脚本,可以吗?!:-)

于 2012-08-31T04:40:51.780 回答
0

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

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

于 2012-08-29T20:43:46.673 回答