Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

Смело правьте и дополняйте шапку, однако не забывайте отписываться об исправлениях и сохранять исходный вариант под #.
Первый пост темы имел вид...

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ

Цитата:
Ну вообще, sed

Можно пример ? Не могу сообразить...  
Удалить текст до line1 и удалить текст после line2 ?

Всего записей: 4941 | Зарегистр. 05-01-2006 | Отправлено: 12:33 27-10-2014 | Исправлено: mithridat1, 12:34 27-10-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Для XML есть nokogiri и xmllint.
Вытащить можно и с помощью awk если изменить RECORD SEPARATOR на искомые начало и конец.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 12:51 27-10-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
 
awk '/Верх/ { show=1 } show; /Низ/ { show=0 }' file
 
Для sed
 
sed -n '/Верх/,/Низ/p' file
 
Вместо Верх/Низ впишите, что Вы ищете.

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 15:45 27-10-2014 | Исправлено: CrownRU, 15:48 27-10-2014
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
Спасибо,работает Нечеловечий язык у этого sed-а,все не могу привыкнуть.
 
Alukardd

Цитата:
Для XML есть nokogiri и xmllint.
Вытащить можно и с помощью awk если изменить RECORD SEPARATOR на искомые начало и конец.

Спасибо,полезная инфа.Особенно nokogiri.

Всего записей: 4941 | Зарегистр. 05-01-2006 | Отправлено: 16:08 27-10-2014
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU, так что там с Перлом-то?
 

Цитата:
...надо бы переписать все это на Перле или Питоне — что там у тебя есть?


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:10 27-10-2014 | Исправлено: ASE_DAG, 20:11 27-10-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Перл есть такой:
 

Код:
# perl --version
This is perl, v5.8.8 built for x86_64-linux-thread-multi

 
Питон тоже.
 

Код:
# python
Python 2.4.2 (#1, Jan 10 2008, 17:43:47)
[GCC 4.1.2 20070115 (prerelease) (SUSE Linux)] on linux2

 
Это на Сусе 10SP2. На новых системах будет, естественно, поновей.
 
Я бы с башем додавил бы, чтобы обновиться, но после нового года мы переезжаем на новое железо с инсталлированием новых версий Common Store. Так что сейчас все молятся, чтобы ничего не случилось до этого самого апдейта. Поэтому, можно подождать до 2015 года
 
Может легче будет вывести функцию стоп/старт инстанции в отдельный скрипт?

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 11:27 28-10-2014 | Исправлено: CrownRU, 11:28 28-10-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Столкнулся со странным поведением (для меня странное) sed.
Необходимо было удалить из файла-конфига все комментарии для более удобного визуального изучения параметров.
Файл 30266 байт = 729 строк
Команда на удаление (успел перепробовать разные вариации):

Код:
sed '/ *#/d; /^ *$/d'

sed делал обработку без каких-либо замечаний, но на выходе неизменно получался файл, оканчивающийся 658-й строкой из входного файла. Строки после 658й во входном файле были без знака комментария, но на выходе замечены не были.
 
#cat /etc/redhat-release
CentOS release 6.6 (Final)
 
# sed --version
GNU sed version 4.2.1
 
P.S.: Помогло только ручное удаление "шапки" на сто строк, но осадочек остался, хотелосьбы разобраться.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 02:15 02-11-2014 | Исправлено: karavan, 02:16 02-11-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Ну во первых вы не правы с самим выражением, т.е. конструкция '/ *#/d'удалит вполне валидную строку — line XXX # some comment at end of line, что не правильно.
Что бы как-то помочь Вам понять поведение sed'а, нужно видеть весь файл.
 
А вообще я всегда это делал grep'ом — grep -v '^[[:blank:]]*\(#\|$\)'

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:18 02-11-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd

Цитата:
Ну во первых вы не правы с самим выражением

Это не единственная конструкция из рекомендованных интернетом, которые я опробовал.
Дело ведь не в том, что удаляется не та строка которая подразумевалась, а интересен именно обрыв на 658 строке.
 
P.S.: За команду для grep спасибо! Он справился без проблем.
 

Цитата:
нужно видеть весь файл.

main.cf

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 21:58 02-11-2014 | Исправлено: karavan, 22:07 02-11-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Ну, в данном случае, команда sed, приведённая Вами, работает так же без проблем как и тот grep, что я  Вам предоставил, но это не отменяет моё предыдущее замечание. К тому же grep, который я Вам написал, учитывает начальные tab'ы, вместо пробелов.
 
sed (GNU sed) 4.2.2

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:22 02-11-2014 | Исправлено: Alukardd, 22:23 02-11-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот так sed тоже пробелы и табы удаляет:

Код:
'/^\s*$/d'

а так с # вначале строки

Код:
'/\s*#.*$/d'

Вроде проще.
С awk gsub, тоже можно. Но это кунг-фу лучше комрады Alukardd и ASE_DAG знают
 

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 00:41 03-11-2014 | Исправлено: CrownRU, 00:42 03-11-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CrownRU
А причём тут gsub? Мы же просто выводим строки попадающие под шаблон и их выводим...

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 00:43 03-11-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, ты прав, я слишком усложнил. Я думал что-то в этом роде:

Код:
awk '/^#/ {sub(/#.*/,"");getline;}1'

...самому поплохело
 
Вот еще для sed:

Код:
sed -n '/^#/!p'

-не печатать строки, начинающиеся на #

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 11:04 03-11-2014 | Исправлено: CrownRU, 11:07 03-11-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Как-то вы оба теряете основную мысль, которую я хочу донести.
Нет проблем с подставляемым параметром, есть проблема с количеством обрабатываемых строк.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 01:10 04-11-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Да Вашу-то проблему я прочёл правильно. Но откуда она взялась я хз, я не знаю как её воспроизвести у себя.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 12:32 04-11-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
ХЗ...
У меня на твоем файле получилось без ошибок:

Код:
sed -e '/^\s*$/d' -e '/\s*#.*$/d' main.cf

 
Вот так
 
Похоже что-то в консерватории не так. Твой код тоже правильный. Вот сейчас проверил:
 

Код:
Твой код
# sed '/ *#/d; /^ *$/d' main.cf|wc -l
89
Мой
# sed -e '/^\s*$/d' -e '/\s*#.*$/d' main.cf|wc -l
89


Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 12:34 04-11-2014 | Исправлено: CrownRU, 12:46 04-11-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Подставьте версии sed в последние сообщения.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 13:49 04-11-2014
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Я всё уже писал.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:57 04-11-2014
CrownRU



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan

Цитата:
Подставьте версии sed в последние сообщения.

 
Вот на этом пробовал:

Код:
# sed --version
GNU sed version 4.1.4
 

Всего записей: 212 | Зарегистр. 14-01-2003 | Отправлено: 15:14 04-11-2014
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Наваял отдельный файлик на тысячу строк, каждую нечетную строку предварил '#',
скормил sed'у с разными вариациями удаления строк-комментов - результат идеален.
Вернулся к файлу main.cf - результат валидный, без обрыва на какой-либо строке.
Пришел к выводу - у темных сил сегодня выходной.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 21:12 04-11-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru