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

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

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

 

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

Всего записей: 354 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
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> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 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

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



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

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

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

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



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

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

Всего записей: 9272 | Зарегистр. 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

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



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

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

Всего записей: 1789 | Зарегистр. 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> [PGP] [BTC]

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

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

Всего записей: 86 | Зарегистр. 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 скрипт.

Всего записей: 525 | Зарегистр. 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.

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



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

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

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

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



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

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

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

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



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

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



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"

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



Silver 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
 
Главное - если найти - заменить еще как то понимаю, по большому счету возможно смогу сам разобраться, то с тегами засада.
 
Если кто подскажет, буду признателен.

Всего записей: 2152 | Зарегистр. 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.

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



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

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



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

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



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

Всего записей: 212 | Зарегистр. 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 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