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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
los

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

Цитата:
Понял так - что типа:   export PKG_PATH

видимо, mg pkg.conf - приемлемый вариант, как уже вам писали или добавьте в kshrc или что у вас там.

Цитата:
Например встретил о сети\(МАС) - читайте >man brconfig - но такого нет.

man ifconfig.
 
В в целом - эта тема несколько о другом, а не о настройке какой-либо ОС.
 
P.S.
про смену MAC на OpenBSD почитайте:
_https://web.archive.org/web/20190118100238/https://calomel.org/mac_random.html
там было много познавательных заметок о BSD системах, посмотрите.

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 17:58 02-01-2021
Baltazar500



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь посредством xmlstarlet на лету добаалять строки в простенькую html-табличку
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html><head><meta charset="utf-8"></head>
<body>
<center>
<table border="1" cellpadding="5">
<tr><td>line #1
<tr><td>line #2
</table>
</center>
</body></html>
и вроде даже ваходит
Код:
cat table.html|xmlstarlet fo -H|xmlstarlet ed -s '/html/body/center/table' -t elem -n 'tr' -v "" -s '//tr' -t elem -n 'tr' -v "line #3"
только помимо новой строки к каждому <tr> - тегу добавляются её дубли.
Код:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN" "">
<html>
  <head>
    <meta charset="utf-8"/>
  </head>
  <body>
    <center>
      <table border="1" cellpadding="5">
        <tr>
          <td>line #1</td>
          <td>line #3</td>
        </tr>
        <tr>
          <td>line #2</td>
          <td>line #3</td>
        </tr>
        <tr>
          <td>line #3</td>
        </tr>
      </table>
    </center>
  </body>
</html>
ЧЯДНТ ?
 
upd: В общем, как-то так :

Код:
node=$((`cat table.html|xmlstarlet fo -H|xmlstarlet sel -t -v '/html/body/center/table/tr/td' -n|sed '/^$/d'|wc -l` + 1))
cat table.html|xmlstarlet fo -H|xmlstarlet ed -s '/html/body/center/table' -t elem -n 'tr' -v "" -s "//tr[$node]" -t elem -n 'td' -v "line #3"

Всего записей: 2090 | Зарегистр. 19-09-2011 | Отправлено: 22:44 11-01-2021 | Исправлено: Baltazar500, 05:12 12-01-2021
NvvLazyTiger



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, почему так получается (что неправильно) и как исправить.
 
ОS: WinXP
Gawk.exe: GNU Awk 4.1.4, API: 1.1
Задача: находить и вычленять entities трёх типов в HTML контексте. Например для ">": "&gt;", "&#62;" или "&#x3e;".
Оператор:
Код:
match(tolower(s0),/(&)(#x[0-9a-f]{2,4})|(#[0-9]{0,6})|([a-z]{2,6})(;)/,aj)

Первый пример:
исходная строка: "abc&gt;def"
после оператора match:
aj[1]="" (пусто! должно быть "&")
aj[2]="" (ок)
aj[3]="" (ок)
aj[4]="gt"
aj[5]=";" (точка-с-запятой, ок)
RSTART=5 (должно быть 4)
RLENGTH=3 (должно быть 4)
 
Второй пример:
исходная строка: "abc&#62;def"
после оператора match:
aj[1]="" (пусто! должно быть "&")
aj[2]="" (ок)
aj[3]="#62" (ок)
aj[4]="" (ок)
aj[5]="" (пусто! должно быть ";")
RSTART=5 (должно быть 4)
RLENGTH=3 (должно быть 5)
 
Я совершенно не понимаю, почему оператор находит искомое, но возвращает результаты не соответствующие ожиданиям, да ещё и с разными отклонениями в зависимости от найденного контекста. Причём, экранирование («\» – обратная косая) в RegExp символов: «\&» и «\#» на ситуацию не влияет.
 
?
 
Спасибо.

Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 10:24 20-01-2021
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помощи.
 
Во вложенном цикле while необходимо изменять значение переменной, которое проверяется во внешнем цикле. Как это сделать ?  
Например, в скрипте ниже значение переменной var при очередной итерации всегда возвращается к единице.
 
var=1
 
while [ $var -gt 0 ];
do
 
echo "aaa|bbb|ccc" |
 
    while IFS=\| read -r a b c;
    do
 
    echo "$a$b$c"
    var=0
    sleep 1
 
    done
 
done
 
_______________
 
 
Решение вопроса найдено, но буду рад предложенным альтернативам.

Всего записей: 4941 | Зарегистр. 05-01-2006 | Отправлено: 16:04 12-03-2021 | Исправлено: mithridat1, 21:34 12-03-2021
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
*Если ещё актуально*
 
Проблема не во вложенных циклах и не областях видимости, а в том что в bash, всё что находится, неважно с какой стороны от pipe (|), вызывается в subshell'е.
Вместо echo "STRING" | while
надо писать while ... done <<< "STRING"

----------
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 | Отправлено: 21:10 20-03-2021
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Хочу заметить что в отличие от варианта
 
echo "STRING" | while read ... done  
 
цикл  
 
while read ... done <<< "STRING"  
 
будет выполнятся всегда, даже если была передана пустая строка. Есть ли способ избежать выполнения такого цикла в случае пустой строки с данными ?

Всего записей: 4941 | Зарегистр. 05-01-2006 | Отправлено: 21:14 23-03-2021 | Исправлено: mithridat1, 21:15 23-03-2021
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mithridat1 (пост)
Цитата:
Есть ли способ избежать выполнения такого цикла в случае пустой строки с данными ?

Внутрь цикла засунуть проверку непустой строки:
(в примере используется проверка "строго больше 1" для исключения из обработки строк содержащих только перевод строки)

Код:
while read Line; do
  if (( ${#Line} > 1 )); then  
    some_command
  fi
done <<< "STRING"  

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 01:27 24-03-2021 | Исправлено: karavan, 01:28 24-03-2021
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mithridat1
Я всегда пишу там [[ -z $line ]] && continue

----------
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 | Отправлено: 11:49 24-03-2021
ruslan910



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Комрады, кому не в тягость - гляньте:
есть сортированный текст

Код:
 
prihod_10 17709620060000281 20770401 3696 20770312 968001
smeta____ 17709620060000281 20770401 3696 20770312 968001
prihod_10 17709620060000282 20770401 3987 20770317 968003
smeta____ 17709620060000282 20770401 3987 20770317 968003
prihod_10 17709620060000283 20770401 51871 20770313 969032
smeta____ 17709620060000283 20770401 51871 20770313 969002
prihod_10 17709620060000284 20770401 4656 20770331 756002
smeta____ 17709620060000284 20770401 4656 20770331 756002
prihod_10 17709620060000285 20770401 4071 20770319 968003
smeta____ 17709620060000285 20770401 4071 20770319 968003
prihod_10 17709620060000286 20770401 4668 20770401 969002
smeta____ 17709620060000286 20770401 4668 20770401 969002
prihod_10 17709620060000287 20770402 52005 20770317 968003
smeta____ 17709620060000287 20770402 52005 20770317 968003
prihod_10 17709620060000288 20770402 52208 20770325 968003
smeta____ 17709620060000288 20770402 52208 20770325 968003
prihod_10 17709620060000289 20770402 3980 20770317 968003
smeta____ 17709620060000289 20770402 3980 20770317 969003
prihod_10 17709620060000290 20770402 4796 20770402 756014
smeta____ 17709620060000290 20770402 4796 20770402 756014
prihod_10 17709620060000291 20770402 4716 20770402 968003
smeta____ 17709620060000291 20770402 4716 20770402 968003
prihod_10 17709620060000292 20770402 3953 20770317 969031
smeta____ 17709620060000292 20770402 3953 20770317 969031
prihod_10 17709620060000293 20770402 4732 20770402 756014
smeta____ 17709620060000293 20770402 4732 20770402 756014
prihod_10 17709620060000294 20770402 4733 20770402 756002
smeta____ 17709620060000294 20770402 4733 20770402 756002
prihod_10 17709620060000295 20770402 4530 20770329 968003
smeta____ 17709620060000295 20770402 4530 20770329 968003
prihod_10 17709620060000296 20770402 4740 20770402 756014
 

 
Нужно после каждой строки со словом smeta добавить пустую строку,
я в этом шаманстве не силен, написал ниже код ))) , но строки со словом prihod сюда естественно не попадают

Код:
 
awk '/^smeta/ { print $1, $2, $3, $4, $5, $6"\n" }' file
 


Всего записей: 428 | Зарегистр. 31-05-2008 | Отправлено: 23:02 15-05-2021
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ruslan910
sed -E '/smeta/s/$/\n/'

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 01:27 16-05-2021
ruslan910



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
karavan
благодарю за помощь.

Всего записей: 428 | Зарегистр. 31-05-2008 | Отправлено: 11:38 16-05-2021
vtlseeker



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую!
Подскажите, есть ли возможность средствами bash определить, произошла ли замена подстроки (кроме сравнения исходной и полученной строки)?

Всего записей: 386 | Зарегистр. 03-03-2009 | Отправлено: 20:13 18-05-2021
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vtlseeker
Давайте сначала поймём хотя бы на русском языке, как (без относительно bash) понять что что-то изменилось, если не известно что там было.

----------
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 | Отправлено: 23:09 18-05-2021
vtlseeker



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

Код:
${parameter/pattern/string}

в случае отсутствия 'pattern' в 'parameter команда завершается без ошибки, поэтому я интересовался способами определить факт замены, кроме описанного ранее

Всего записей: 386 | Зарегистр. 03-03-2009 | Отправлено: 23:51 18-05-2021
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vtlseeker
Такая конструкция не меняет переменную, поэтому и "факта замены" в целом и нет.
В общем, нет, без доп проверок до и/или после Pattern substitution понять что произошло и произошло ли — нельзя.

----------
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:08 19-05-2021 | Исправлено: Alukardd, 00:09 19-05-2021
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, приветствую!
Помогите разобраться, плиз.
 
На просторах инета нашел скрипт
Код:
Подробнее...
 
cat /scripts/send_alert.sh
Подробнее...
 
В итоге, в теле письма получаю только первое слово "Данное".
Как поместить полное содержание файла в тело письма?
Прошу сориентировать именно по моему вопросу и не предлагать mutt и т.д.

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 21:44 19-05-2021
vtlseeker



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

Код:
$MAILCMD "$(cat $MAILMESSAGE)" $EMAILID

вызывает такое поведение

Всего записей: 386 | Зарегистр. 03-03-2009 | Отправлено: 22:10 19-05-2021
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vtlseeker
 
Спасибо, огромное!
Я ставил кавычки, но не снаружи, а внутри. Снаружи не допер ((

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 22:20 19-05-2021
alexnov66



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

Всего записей: 1232 | Зарегистр. 29-08-2005 | Отправлено: 11:06 27-06-2021 | Исправлено: alexnov66, 11:36 27-06-2021
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alexnov66
подробнее можно? Убрать в скрипте, в выводе и т.д.?

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 22:54 27-06-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 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