Vi または ex を使用してコマンドを実行し、最初の 5 行を削除してファイルを編集しようとしてx
いy
ます。次に、ファイルの名前をシェル スクリプトに変更し、現在のスクリプトから新しいスクリプトを実行します。
これは、cron でスケジュールされているものになります。コマンドラインや Vim スクリプトなどを使用して簡単に実行できる方法を探していました。
何か案は?入力ファイルのフォーマットは変わらず、行数だけなので、最後の8行の行番号は指定できません。
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
は単純に出力を実行します。本当にこれをスクリプトとして保存したい場合は、出力をファイルにリダイレクトすることでそれを行うことができます...しかし、少なくともそれはあなたの想像に任せます。すべてのスクリプトを作成することはできませんよね?! :-)
実際、ここには約半ダースの質問があります。最初の 5 つの問題に対する答えは次のとおりです。おそらく最も解決が難しい問題です。
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
スクリプトでファイルを編集するには、ed
(学習や覚えが難しい場合でも)を使用できます。
スクリプト言語 (Python、Perl、AWK、Ruby) を使用して目標を達成することもできます。