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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

Всего записей: 259 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: ASE_DAG, 22:02 01-03-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KrgUser
> Если совсем уж туго с воображением...
 
Странная однако у вас тактика — просить помощи и при этом хамить.
 
> Да в общем-то нет ограничения
 
Странно, а только что было...
 
> просто интересно, можно ли таким способом.
 
Можно.  Сед — полный по Тьюрингу язык.
 
> нужно, чтобы работало под MSYS
 
У меня нет этого вашего MSYS, и я так понял, что на ГНУ его априори поставить нельзя, но heredoc-то там, я надеюсь осилили:
 
#!/bin/bash
 
a='qweqw wdw ssacasc
asd xccvdv sdfds
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg'
 
b='qweqw wdw ssacasc
asd xccvdv sdfds
assdasd sdfsdf dfgfghfgjh sdfsd
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg'
 
readarray -t A <<< "$a"
readarray -t B <<< "$b"
 
for i in ${!B[@]}; do
    if [[ ${A[$i]} != ${B[$i]} ]]; then
        printf '%s\n' "${B[$i]}"
        break
    fi
done


----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 16:36 08-03-2017
KrgUser

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

Цитата:
Странная однако у вас тактика — просить помощи и при этом хамить
Укажите, где я хамил? Я лишь отвечал в тон Вашему ответу. Мне показалось странным, что столь опытному пользователю непонятно утверждение типа
Цитата:
переменные a и b, это наборы строк


Цитата:
Странно, а только что было...
Опять же, укажите, где я ставил ограничения? Я всего-то лишь спросил
Цитата:
Как решить задачу с помощью sed?
Говоря Вашим языком, не вижу ограничений

Цитата:
...вашего MSYS
Вы делаете мне честь). Таки, это не моя разработка
Цитата:
...но heredoc-то там, я надеюсь осилили
Насчет доков не скажу, но вот Ваша конструкция опять не пашет
Цитата:
readarray: command not found
В MSYS реализовано очень много утилит Unix, но, к сожалению, с ограничениями
 
В любом случае, спасибо за ответы
На всякий случай: я использую следующую сборку MSYS
https://sourceforge.net/projects/mingwbuilds/files/external-binary-packages/msys%2B7za%2Bwget%2Bsvn%2Bgit%2Bmercurial%2Bcvs-rev13.7z/download

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 19:57 08-03-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
KrgUser
Сохранить переменную a в файл и использовать grep -Fv -f... или вот просто без sed вообще никак?

Всего записей: 5498 | Зарегистр. 11-03-2002 | Отправлено: 02:08 09-03-2017
KrgUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Использовать файлы, конечно, самый простой способ, но хотелось бы по возможности обойтись без этого (надо подчищать все время и такое)
Цитата:
...или вот просто без sed вообще никак?
Ну почему же? Главное, работало под MSYS

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 08:40 09-03-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KrgUser> Укажите, где я хамил?
 
Мне казалось, я вас процитировал.
 
> Опять же, укажите...
 
Извините, русский язык — ваш родной?
 
> В MSYS реализовано очень много утилит Unix, но, к сожалению, с ограничениями
 
Ну, readarray — не утилита, и по смыслу не может ей быть, это часть Баша.
 
Что же там у вас, такая версия, что вообще массивов еще нет?
 
$ echo $BASH_VERSION

----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 09:47 09-03-2017 | Исправлено: ASE_DAG, 09:47 09-03-2017
KrgUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
3.1.17(1)-release

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 10:33 09-03-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KrgUser
Может не в тему, но есть еще MSYS2.

Код:
$ echo $BASH_VERSION
4.4.12(1)-release

Всего записей: 1558 | Зарегистр. 30-03-2014 | Отправлено: 15:13 09-03-2017
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KrgUser> 3.1.17(1)-release
 
Ну массивы вроде бы есть, и на том хорошо.
 
Вот так, возможно, прокатит:

#!/bin/bash
 
a='qweqw wdw ssacasc
asd xccvdv sdfds
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg'
 
b='qweqw wdw ssacasc
asd xccvdv sdfds
assdasd sdfsdf dfgfghfgjh sdfsd
asdas cvcvb dfgfgdhg
123 4554gffdgfe  dgffdgg'
 
IFS=$'\n' read -r -a A -d '' <<< "$a"
IFS=$'\n' read -r -a B -d '' <<< "$b"
 
for i in ${!B[@]}; do
    if [[ ${A[$i]} != ${B[$i]} ]]; then
        printf '%s\n' "${B[$i]}"
        break
    fi
done


----------
Dmitry Alexandrov <321942@gmail.com>

Всего записей: 9103 | Зарегистр. 12-05-2005 | Отправлено: 15:54 09-03-2017
KrgUser

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
thejustsoul
Цитата:
Может не в тему, но есть еще MSYS2
В тему, но про это я знаю, и MSYS2 мне не нравится по разным причинам:
1) То что требует инсталляции (вместе с дурацким web-загрузчиком). MSYS можно скачать в виде простого архива --- распакуй и работай
2) Какие-то идиотские ограничения (например, нельзя устанавливать на FAT --- с правами, что ли, мудрят, а так ли они нужны?)
 
ASE_DAG
Цитата:
Вот так, возможно, прокатит
Спасибо, прокатило
 
А sed спрашивал потому, что хотелось решения проще

Всего записей: 51 | Зарегистр. 26-04-2011 | Отправлено: 05:51 10-03-2017
ForposT_ForeveR



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте.
Помогите, пожалуйста, решить проблему.
В файле ips находится большое количество IP адресов, которые необходимо прогнать через GEO IP и записать вывод в два файла:
Название 1го файла: short/[country code]
Сюда записать только IP
Название 2го файла: full/[country_code]
IP, State.... ZIP
 
Пример команды GEO IP:
https://snag.gy/u09TfL.jpg
 
Необходим bash скрипт.

Всего записей: 490 | Зарегистр. 11-12-2004 | Отправлено: 04:03 12-03-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
> записать вывод в два файла
Вы хотели сказать в две папки...
 

Код:
#!/bin/bash
 
cd /path/to/project/root/folder
 
IPFILE="ips.list"
 
mkdir -p short
mkdir -p full
 
while read -r ip; do
  res="$(geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat $ip | awk -F: '{print $2}')"  # это бред, geoiplookup хорошо бы уметь не писать ненужную метаинформацию о себе в каждом ответе
  country="$(awk -F, '{print $1}' <<< "$res")"
  echo "$ip" >> "short/$country"
  echo "${ip}, $res" >> "full/$country"
done <"$IPFILE"
(писал прямо здесь без проверок)

Цитата:
Пример команды GEO IP:  
ну сколько можно выдавать две строки текста в виде картинки, вместо текста?!

----------
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.

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 13:33 12-03-2017 | Исправлено: Alukardd, 13:36 12-03-2017
karavan



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

Цитата:
ну сколько можно выдавать две строки текста в виде картинки, вместо текста?!

С этим надо смириться - не каждый новичок из всех имеет удобный терминал с поддержкой копипасты

Всего записей: 1135 | Зарегистр. 02-12-2011 | Отправлено: 14:51 12-03-2017
mithridat1



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

Цитата:
 не каждый новичок из всех имеет удобный терминал с поддержкой копипасты

Смешно.Сложно найти терминал без копипасты

Всего записей: 3761 | Зарегистр. 05-01-2006 | Отправлено: 15:06 12-03-2017 | Исправлено: mithridat1, 15:06 12-03-2017
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
mithridat1
Легко, доступ к VNC на консоль VPS через браузер.  
Только про ssh тссс, нас могут услышать

Всего записей: 1135 | Зарегистр. 02-12-2011 | Отправлено: 15:50 12-03-2017
CrownRU



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Наваял тут творение. Скрипт вроде работает, но совсен не оптимирован.
Учитывая то, что скриптом будет пользоваться "сторож", хотелось бы выслушать советы по улучшению и как избавиться от слипов.
 
Скрипт должен закрыть 3 процесса - 2 от Websphere и один DB2.
Думаю в скрипте все понятно.
 

Код:
ECLIENTPID=$(pgrep -f "eclient server1")
ICMRMPID=$(pgrep -f "icmrm server1")
 
kill_eclient()
{ if kill -0 $ECLIENTPID; then echo Prozess runs yet and swill be closed; kill -15 $ECLIENTPID ; fi  
sleep 30
if kill -0 $ECLIENTPID; then echo Prozess runs yet and will be destroyed closed; kill -9 $ECLIENTPID ; fi
sleep 10
STOPPID=$(pgrep -f "stopserver.sh eclient")
if kill -0 $STOPPID ; then kill -15 $STOPPID; fi
sleep 10
if kill -0 $STOPPID ; then kill -9 $STOPPID; fi }
 
kill_icmrm()
{ if kill -0 $ICMRMPID; then echo Prozess runs yet and swill be closed; kill -15 $ICMRMPID ; fi
sleep 30
if kill -0 $ICMRMPID; then echo Prozess runs yet and will be destroyed; kill -9 $ICMRMPID ; fi }
 
echo '-----------------------------------------------------------------------------'
echo '>>> 'eClient shutdown...
echo '-----------------------------------------------------------------------------'
 
(     /opt/IBM/WebSphere/AppServer/profiles/eclient/bin/stopServer.sh  server1 ) &
LASTPID=$!
sleep 60
kill_eclient
( sleep 20 && kill -15 -$LASTPID ) &
 
sleep 15
 
echo '-----------------------------------------------------------------------------'
echo '>>> 'ResourceManager shutdown...
echo '-----------------------------------------------------------------------------'
(     /opt/IBM/WebSphere/AppServer/profiles/icmrm/bin/stopServer.sh server1 ) &
LASTPID=$!
sleep 60
kill_icmrm
( sleep 20 && kill -15 -$LASTPID ) &
sleep 15
 
echo '-----------------------------------------------------------------------------'
echo '>>> 'DB2 shutdown...
echo '-----------------------------------------------------------------------------'
su - db2icm -c db2stop
echo '>>> 'Wait 30s
sleep 30
echo '>>> 'Stoppe DB2 FORCE ...
su - db2icm -c "db2stop force"

Всего записей: 192 | Зарегистр. 14-01-2003 | Отправлено: 13:27 24-03-2017
Weinaum



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую,  
вопрос по массовому редактированию - примерно 1000 файлов html, все на виртуальном хостинге,   в одной директории. Можно конечно скачать и потом регулярками в notepad++ как то, но подумалось, раз есть ssh, может напрямую проще будет? Впрочем, если нет, то  notepad++ оставляю в уме про запас.
 
Структура всех файлов одна, вот один из исходных файлов. Заменил на txt, чтобы проще открывался код.
http://alexander-naumov.com/data/test/AN01_12.txt
Надо удалить все строки, начиная - все что под тегом <header>, дальше все что под <div class=" container"> , те несколько br что идут дальше до <div style="margin-left:35px;">, и заканчивая следующим <font color="#000000">.  
В файле примере дальше идет второй <body>, соот-но это ошибка, и тоже надо удалить, но эта ошибка есть не во всех файлах.
 
Теперь - присутствуют тоже не во всех файлах, но есть - выше <header> подключаются пару стилей,  их тоже надо удалить, если они есть. Вот они.
<link href="../../css/layout.css" rel="stylesheet" type="text/css" />
<link href="../../css/menu.css" rel="stylesheet" type="text/css" />  
 
Строку <div style="margin-left:35px;"> надо заменить на <div class="archive">
 
И последнее.  
В примере есть 6 картинок, встречаются не во всех файлах.
Там где они есть, надо относительные пути заменить на абсолютные.
Т.е. было src="../../pics/.."
надо чтобы стало  src="http://mysite.com/pics/.."
В принципе больше ничего не надо, достаточно чтобы файл стал таким:
 
http://alexander-naumov.com/data/test/test2.txt
 
Главное - если найти - заменить еще как то понимаю, по большому счету возможно смогу сам разобраться, то с тегами засада.
 
Если кто подскажет, буду признателен.

Всего записей: 1864 | Зарегистр. 18-06-2006 | Отправлено: 22:40 01-05-2017
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Что-то вы дохрена менять хотите...
Ну я бы решал её с помощью Ruby::Nokogiri, оно как-то поудобнее всего остального будет.
А так можно пытаться использовать и другие ЯП под это дело, или пытаться ужиться с xmllint
 
 
Вот например, как вырезать div
Код:
#!/usr/bin/env ruby
 
require 'nokogiri'
 
data = File.read(ARGV[0])
 
 
doc = Nokogiri.HTML( data )
doc.css('div[class="container"]').each do |el|
  #el.replace( el.inner_html )
  el.remove()
end
puts(doc.to_html)
(примеры того как и что можно выбирать из HTML'я — http://ruby.bastardsbook.com/chapters/html-parsing/)

----------
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.

Всего записей: 6153 | Зарегистр. 28-08-2008 | Отправлено: 16:29 02-05-2017
Weinaum



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
только добрался до нормального домашнего интернета.
Интересно, спасибо, на выходных буду пробовать.

Всего записей: 1864 | Зарегистр. 18-06-2006 | Отправлено: 09:46 06-05-2017
Pasha_ZZZ



Gold Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Weinaum
Цитата:
Можно конечно скачать
Можно сразу подключить диск через SFTP Net Drive

Всего записей: 5498 | Зарегистр. 11-03-2002 | Отправлено: 10:34 06-05-2017
CrownRU



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Комрады, помогите разобраться со скриптом.
Хочу выловить файл, раскрутить его на части, чтобы потом использовать в скрипте.
Собрал такую штуку. Хотелось бы, чтобы в командной строке сперва обрабатывался аргумент $1 , ну а потом уже аргументы getops. типа вот так:
script.sh <$1> <getopts>
 
 

Код:
BASEDIR="/long/long/path"
INST=$(find "$BASEDIR" -type f -name conf.ini.$1)
INSTP=$(awk /\^INSPORT/'{ print $2 }' $INST)
WEBP=$(awk /\^WEBPORT/'{ print $2 }' $INST)    
 
while getopts "lsf" Option
do
case $Option in
l)
lsof -i:$INSTP -i:$WEBP;;
 
s)
echo "stops -i $BASEDIR$INST";;
 
f)
echo "nohup starts -i $BASEDIR$INST &";;
esac
done

Всего записей: 192 | Зарегистр. 14-01-2003 | Отправлено: 14:17 17-05-2017
Открыть новую тему     Написать ответ в эту тему

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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2017

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru