Использование сценария оболочки Linux для редактирования и переименования файла

Я пытаюсь выполнить команду, используя Vi или ex для редактирования файла, удалив первые пять строк, заменив x с yудалите лишние пробелы в конце каждой строки, но сохраните возвраты carraige и удалите последние восемь строк файла, затем переименуйте файл в сценарий оболочки и запустите новый сценарий из текущего сценария.

Это будет то, что запланировано в cron. Я искал простой способ сделать это, используя командную строку или сценарий Vim или что-то.

Есть идеи? Формат входного файла не изменяется, только количество строк, поэтому я не могу указать номера строк для последних восьми строк.

3 ответа

На самом деле у вас есть около полдюжины вопросов здесь. Вот ответ на первые пять, которые, вероятно, будут самыми трудными для решения:

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 более портативный.

Также финал | sh просто запускает вывод. Если вы ДЕЙСТВИТЕЛЬНО хотите сохранить это как скрипт, вы можете сделать это, перенаправив вывод в файл... но я по крайней мере оставлю это вашему воображению. Не можем сделать все ваши сценарии для вас, не так ли?!:-)

Чтобы отредактировать файл скриптом, вы можете использовать ed (даже если это трудно учиться или запомнить).

Вы также можете использовать некоторые скриптовые языки (Python, Perl, AWK, Ruby) для достижения своей цели.

Другие вопросы по тегам