LINUX.ORG.RU
ФорумAdmin

Форматирование вывода и продвинутый редакторинг


0

0

При работе в командной строке возникают довольно рутинные задачи. Поскольку в Линукс есть инструменты для решения любой рутины, возможно тут мне подскажут чего-нибудь. Вопрос такой: Я знаю только две программы форматирования выводимого на консоль текста: less - вывод текста с возможностью страничного листания и grep - вывод только строк, содержащих заданный текст. Какие есть ещё? Возможно ли выводить текст так, чтобы в каждой строке вырезались например первые три символа, а также все после первого пробела? Возможно ли, чтобы список выводимый построчно выводился через пробел? Часто выводимый текст идёт в качестве входного параметра другой команды. Можно в любом редакторе, в mousepad например, применять замену, неугодную группу символов заменять на пробелы. Но вот невозможно в нём заменить перевод строки на пробел или пробел на табуляцию. Но это если работаешь в консоли xterm в иксах. А если чистая консоль то как быть? Вобщем чем в этих случаях пользуются юникс-администраторы?

★★★★★

sed awk и Advanced Bash Scripting для начала

Unclown
()

Какие есть ещё?

Много :) Навскидку, самые часто упоминаемые: sed (редактор потоков);
cat (выводит файл на экран или в другой файл);
paste, cut и join (умеют объединять строки и тасовать колонки);
split и csplit (режут файлы в заданном месте);
head и tail (выводят начало или конец);
sort (сортировка);
uniq (поиск повторов);
diff (набор программ для сравнения файлов).

Довольно полный список выводится в info coreutils (после подзаголовка «Output of entire files»), но там нет программ, не входящих в coreutils: sed, less, more (более простой аналог less), grep, diff, awk (язык программирования, говорят, удобен для обработки текстов, почти вытеснен более удобным perl-ом).

Возможно ли выводить текст так, чтобы

man sed

Или http://sed.sourceforge.net/

в каждой строке вырезались например первые три символа,

Заменить 3 любых символа в начале строки на ", применить к каждой строке:

sed 's/^...//'

все после первого пробела?

Заменить все строки, соответствующие шаблону

^[^ ]* .*
(в начале любое число любых символов, кроме пробела, потом пробел, потом любое число любых символов) на ту часть, которая выделена \( \):
sed 's/^\([^ ]*\) .*/\1/

Возможно ли, чтобы список выводимый построчно выводился через пробел?

перевод строки на пробел

Нетривиальная задача для sed — он читает поток построчно, поэтому концы строк обычно не видит. Можно сделать так:

sed ':a;N;$!ba;s/\n/ /g'
(Объяснение как оно работает: http://www.linuxquestions.org/questions/showthread.php?p=3129173#post3129173, только там не пробел, а табуляция \t.)

пробел на табуляцию

В каждой строке, неограниченное число раз

sed 's/ /\t/g'

чем в этих случаях пользуются юникс-администраторы?

sed, vim, emacs. Или скрипты на bash, awk или более «настоящих» языках.

question4 ★★★★★
()
Ответ на: комментарий от question4

Во втором скрипте забыл закрывающую кавычку. Должно быть так:

sed 's/^\([^ ]*\) .*/\1/'

question4 ★★★★★
()
Ответ на: комментарий от question4

> > перевод строки на пробел

Нетривиальная задача для sed — он читает поток построчно, поэтому концы строк обычно не видит. Можно сделать так:

sed ':a;N;$!ba;s/\n/ /g'

ZOMG! man tr:

tr '\n' '\t'

anonymous
()
Ответ на: комментарий от anonymous

> tr '\n' '\t'

У него один недостаток: глючит на UTF. Хотя для замены концов срок им пользоваться можно.

question4 ★★★★★
()

Подниму ка я тему.
Вот на луркморе попалась статья про vi http://lurkmore.ru/Vi там такая фраза «В одном из режимов vi пищит, а в другом — всё портит.»
Согласен. У меня тоже портил. Например случайно удаляю строку, решаю сразу же выйти без сохранения, набираю :x потом снова открываю в vi этот же файл - оказалось что удаление сохранилось - файл испорчен.
Вообще в vi есть возможность отката изменений (в HOWTO не нашёл), ну по типу ctrl+z как в гуи-редакторах?

sunny1983 ★★★★★
() автор топика
Ответ на: комментарий от sunny1983

> Подниму ка я тему.

Маловероятно, что её заметят. Если есть много вопросов по vi/vim, лучше создать новую.

Например случайно удаляю строку, решаю сразу же выйти без сохранения, набираю :x потом снова открываю в vi этот же файл - оказалось что удаление сохранилось - файл испорчен.

Выход — :quit или :q. Выход без сохранения — :q! (двоеточие, кью, восклицательный знак).

:x и :xit — выход с сохранением изменений.

Вообще в vi есть возможность отката изменений (в HOWTO не нашёл), ну по типу ctrl+z как в гуи-редакторах?

Кнопка u. Подробнее — :help undo

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.