我正在尝试使用Vi执行命令,或者通过删除前五行来编辑文件,将x
替换为y
,删除每行末尾的额外空格但保留carraige返回并删除文件的最后八行,然后将文件重命名为shell脚本并从当前脚本运行新脚本。
这将是在cron中安排的事情。我一直在寻找一种简单的方法来使用命令行或Vim脚本等。
有什么想法吗?输入文件的格式不会改变,只是行数,所以我不能指定最后八行的行号。
答案 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)来实现你的目标。