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

时间:2012-08-29 20:40:54

标签: vim vi ex ed

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

这将是在cron中安排的事情。我一直在寻找一种简单的方法来使用命令行或Vim脚本等。

有什么想法吗?输入文件的格式不会改变,只是行数,所以我不能指定最后八行的行号。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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更易于移植。

此外,最终| sh只是运行输出。如果您真的想将其保存为脚本,可以通过将输出重定向到文件来实现...但我至少会留下您的想象力。不能为你做所有的脚本,可以吗?! : - )

答案 2 :(得分:0)

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

你也可以使用一些脚本语言(Python,Perl,AWK,Ruby)来实现你的目标。