На самом деле то, что вы описываете, сработает, с некоторыми замечаниями:
docker container ls
в файл с именем /bin/dcls
. Но поведение этого может быть немного сложным. Немного надежнее начинать файл со строки под названием «шебанг», поэтому файл будет выглядеть как #!/bin/sh docker container ls, что указывает на то, что файл является сценарием оболочки.
chmod +x /bin/dclsВам, вероятно, нужно быть root, чтобы сделать это (, то есть запустить его с помощью
sudo
). Выполните два вышеуказанных шага, и вы сможете ввести dcls
так и будет docker container ls
. Но если вы наберете dcls -l foo
, это все равно будет docker container ls
. Если вы хотите, чтобы это было сделано docker container ls -l foo
, вы должны изменить сценарий, чтобы сказать
#!/bin/sh docker container ls "$@"который указывает, что любые аргументы, которые вы вводите в командной строке
dcls
, следует передать команде docker container ls
. Естественно, есть вещи и посложнее вы можете сделать с аргументами строки команды -.
Для преобразования одна простая команда → одна простая команда, которым не нужно делиться с другими пользователями, проще определить псевдоним (, как предложил Фредди ), или функцию оболочки. Более сложные функции часто записываются в виде скриптов; т. е. текстовые файлы, содержащие команды. Но, если вам не нужно делиться им с другими пользователями, чаще используется частный каталог bin
.
$ cd # (to your home directory) $ mkdir bin
Затем скопируйте dcls
в $HOME/bin
, и добавьте
export PATH="$HOME/bin:$PATH"
к вашему ~/.bashrc
.
Также принято помещать личные скрипты в /usr/local/bin
, и оставьте /bin
для программ, идущих в комплекте с системой.
Использование lynx
для преобразования HTML в текст, затем sed
удаление всего до пробела после >
в каждой строке (, но вывод только тех строк, которые действительно были затронуты ).
$ lynx --dump 'http://homeoint.org/books/boericmm/d.htm' | sed -n 's/.*> //p'
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
Если у вас возникли проблемы с lynx
вставкой разрывов строк -, увеличьте ширину «страницы» с 80 по умолчанию до большего числа с помощью--width
(см. lynx
руководство ).
Используйте tr
для удаления разрывов строк(tr -d $'\n'
)и сокращения повторов <space>
(tr -s ' '
), после чего вы можете легкоgrep
:
curl 'http://www.homeoint.org/books/boericmm/d.htm' \
| tr -d $'\n' \
| tr -s ' ' \
| grep -Po '> *\K[^<]*'
Выход:
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA
(ваш grep
тоже подойдет, но ваш .*
жадный, вам нужен.*?
).
Вы можете использовать python
+ BeautifulSoup
для анализа веб-сайта.
Это не очень красиво, так как код этого веб-сайта html
является наихудшим методом, но он работает.
Поместите это в файлscript.py
:
#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup
import re
def parse(url):
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
items=(re.findall('(?<=> )[^<]*', " ".join(str(soup.find_all("p")[4]).split())))
for i in items:
print (i)
parse('http://homeoint.org/books/boericmm/d.htm')
Чтобы получить все страницы (что, я думаю, вы хотите сделать... ), замените последнюю строку на:
import string
for c in list(string.ascii_lowercase):
parse('http://homeoint.org/books/boericmm/'+c+'.htm')
И запустите python script.py
илиpython3 script.py
Конечно, вам необходимо установить зависимости (bs4
, re
,requests
).
С GNU awk для мульти -char RS:
awk -v RS='>|<br>' '!(NR%2){$1=$1; print}' file
DAMIANA (TURNERA)
DAPHNE INDICA
DIGITALIS PURPUREA (DIGITALIS)
DIOSCOREA VILLOSA
DIOSMA LINCARIS
DIPHTHERINUM
DOLICHOS PRURIENS (DOLICHOS PURIENS - MUCUNA)
DORYPHORA DECEMLINEATA (DORYPHORA)
DROSERA ROTUNDIFOLIA (DROSERA)
DUBOISIA MYOPOROIDES (DUBOISIA)
DULCAMARA