Использование сценария оболочки 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) для достижения своей цели.