Skip to content

Commit 85fab36

Browse files
authored
Add files via upload
1 parent 62317d2 commit 85fab36

18 files changed

+290
-1
lines changed

04_BASH_Ввод_Вывод.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,4 +143,4 @@ ls -l 04_BASH_Ввод_Вывод_file xfile xxfile 2> /dev/null # Заглуш
143143

144144
#Если нужно очистить файл, не удаляя его:
145145
##
146-
cat /dev/null > myfile
146+
cat /dev/null > myfile

06_BASH_func_file

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function addnum() {
2+
read -p "Введите переменную: " value
3+
read -p "Введите вторую переменную: " value2
4+
result=$(($value+$value2))
5+
echo "Результат сложения переменных: $result"
6+
}
7+
function addnum2() {
8+
read -p "Введите переменную: " value
9+
read -p "Введите вторую переменную: " value2
10+
result=$(($value-$value2))
11+
echo "Результат вычитания переменных: $result"
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
#!/bin/bash
2+
# Основы работы с sed
3+
# По умолчанию sed применяет указанные при вызове правила, выраженные в виде набора команд, к STDIN. Это позволяет передавать данные непосредственно sed
4+
# Ключ "s" - сокращенно от "substitute" (замена)
5+
##
6+
echo "Это тест" | sed 's/тест/другой тест/' # Вконце нужно закрывать прямым слэшем!
7+
8+
# Обработка файла через sed
9+
# Sed не меняет данные в обрабатываемом файле. Редактор читает файл, обрабатывает прочитанное, и отправляет то, что получилось, в STDOUT
10+
##
11+
sed 's/тест/другой тест/' ./07_BASH_Sed_file # Вконце нужно закрывать прямым слэшем!
12+
13+
# Выполнение наборов команд при вызове sed. Замена двух фрагментов текста
14+
# Для выполнения нескольких действий с данными, нужно использовать ключ -e при вызове sed
15+
##
16+
sed -e 's/Это/То/; s/тест/другой тест/' ./07_BASH_Sed_file # Все замены в одиночных кавычках, разделяются точкой с запятой (;)
17+
# При этом между окончанием команды и точкой с запятой не должно быть пробела
18+
19+
# Можно набирать замену прямо из командной строки. После написания "sed -e '", нажать ENTER и продолжить вводить сновой строки
20+
##
21+
sed -e '
22+
s/Это/То/
23+
s/тест/другой тест/' ./07_BASH_Sed_file
24+
25+
# Чтение команд из файла
26+
# Если имеется множество команд sed, с помощью которых надо обработать текст, обычно удобнее всего предварительно записать их в файл.
27+
# Для того, чтобы указать sed файл, содержащий команды, используют ключ -f
28+
# Создадим файл с командами 07_BASH_mycommands
29+
# Вызовем sed, передав редактору файл с командами и файл для обработки: "sed -f 07_BASH_mycommands 07_BASH_Sed_file"
30+
##
31+
sed -f ./07_BASH_mycommands ./07_BASH_Sed_file
32+
33+
# Флаги команды замены
34+
# Вот что содержится в файле, и что будет получено после его обработки командой: "sed -e 's/Это/То/; s/тест/другой тест/' ./07_BASH_Sed_file2"
35+
# В файте: Это тест. Это тест хороший
36+
# Это следующий тест. Тест скрипта
37+
# На экране: То другой тест. Это тест хороший
38+
# То следующий другой тест. Тест скрипта
39+
# Команда замены нормально обрабатывает файл, состоящий из нескольких строк, но заменяются только первые вхождения искомого фрагмента текста в каждой строке
40+
# Для того, чтобы заменить все вхождения шаблона, нужно использовать соответствующий флаг
41+
# Схема записи команды замены при использовании флагов выглядит так: "sed 's/pattern/replacement/flags'"
42+
# При передаче номера учитывается порядковый номер вхождения шаблона в строку, заменено будет именно это вхождение
43+
# Флаг "g" (global) указывает на то, что нужно обработать все вхождения шаблона, имеющиеся в строке, сделать глобальную замену
44+
# Флаг "p" указывает на то, что нужно вывести содержимое исходной строки
45+
# Флаг вида "w file" указывает команде на то, что нужно записать результаты обработки текста в файл
46+
##
47+
sed 's/Это/То/2' ./07_BASH_Sed_file2 # Заменяется лишь второе вхождение искомого шаблона в каждой строке
48+
sed 's/Это/То/g' ./07_BASH_Sed_file2 # Заменяются все вхождения шаблона в тексте
49+
sed -n 's/Это/То/p' ./07_BASH_Sed_file2 # Флаг команды замены p позволяет выводить строки, в которых найдены совпадения,
50+
# при этом ключ -n, указанный при вызове sed, подавляет обычный вывод (не понятно по выводу!)
51+
sed 's/Это/То/w 07_BASH_output' ./07_BASH_Sed_file2 # обработанные строки записываются в файл, имя которого указано после "w"
52+
53+
# Символы-разделители
54+
# Например, нужно заменить /bin/bash на /bin/csh в файле ./07_BASH_Sed_file3
55+
##
56+
sed 's/\/bin\/bash/\/bin\/csh/' ./07_BASH_Sed_file3
57+
# так как прямые слэши используются в роли символов-разделителей, такие же символы в передаваемых sed строках приходится экранировать
58+
# В результате страдает читаемость команды. sed позволяет нам самостоятельно задавать символы-разделители для использования их в команде замены
59+
# Разделителем считается первый символ, который будет встречен после "s"
60+
sed 's!/bin/bash!/bin/csh!' ./07_BASH_Sed_file3
61+
62+
# Выбор фрагментов текста для обработки
63+
# Можно задать ограничение на номера обрабатываемых строк или указать фильтр, в соответствии с которым строки нужно обработать
64+
##
65+
sed '2s/тест/другой тест/' ./07_BASH_Sed_file4 # ! Номер строки, в которой нужно произвести замену ставится ПЕРЕД "s"
66+
67+
# Указание диапазона строк, в которых производится замена
68+
##
69+
sed '2,3s/тест/другой тест/' ./07_BASH_Sed_file4 # Номер строк, в которых нужно произвести замену, перечисляются через запятую
70+
71+
# Произвести замену, начиная с некоторой строки до конца файла
72+
##
73+
sed '2,$s/тест/другой тест/' ./07_BASH_Sed_file4
74+
75+
# Обрабатывать с помощью команды замены только строки, соответствующие заданному фильтру
76+
# Например, если в строке присутствует слово "третий", заменить слово "тест" на словосочетание "совсем другой тест"
77+
##
78+
sed '/третий/s/тест/совсем другой тест/' ./07_BASH_Sed_file4
79+
80+
# Удаление строк
81+
# Вывести файл на экран, без третьей строки из этого файла
82+
##
83+
sed '3d' ./07_BASH_Sed_file4
84+
85+
# Удалить все строки и вывести на экран
86+
##
87+
sed 'd' ./07_BASH_Sed_file4
88+
89+
# Удалить диапазон строк с первой по вторую и вывести на экран
90+
##
91+
sed '1,2d' ./07_BASH_Sed_file4
92+
93+
# Удалить строки, начиная с заданной, до конца
94+
##
95+
sed '2,$d' ./07_BASH_Sed_file4
96+
97+
# Удалить строку, содержащую шаблон и вывести на экран
98+
##
99+
sed '/третий/d' ./07_BASH_Sed_file4\
100+
101+
# При вызове d можно указывать пару шаблонов — будут удалены строки, в которых встретится шаблон, и те строки, которые находятся между ними
102+
##
103+
sed '/второй/, /четвертый/d' ./07_BASH_Sed_file4\
104+
105+
# Вставка текста в поток
106+
# С помощью sed можно вставлять данные в текстовый поток, используя команды i и a:
107+
# Команда "i" добавляет новую строку перед заданной
108+
# Команда "a" добавляет новую строку после заданной
109+
##
110+
echo "Другой тест" | sed 'i\Самый первый тест' # Вставляет текст ДО
111+
echo "Другой тест" | sed 'a\Самый первый тест' # Вставляет текст ПОСЛЕ
112+
113+
# Вставка текста МЕЖДУ строками
114+
# Вызовем команду "i", указав номер строки, ПЕРЕД которой надо вставить новую строку:
115+
##
116+
sed '2i\Это вставленная строка' ./07_BASH_Sed_file4 # !!! После "i", "a" и "c" ставится ОБРАТНЫЙ слэш
117+
118+
# Вставка текста МЕЖДУ строками
119+
# Вызовем команду "a", указав номер строки, ПОСЛЕ которой надо вставить новую строку:
120+
##
121+
sed '2a\Это вставленная строка' ./07_BASH_Sed_file4 # !!! После "i", "a" и "c" ставится ОБРАТНЫЙ слэш
122+
123+
# Замена строк
124+
# Команда "c" позволяет изменить содержимое целой строки текста в потоке данных
125+
# При её вызове нужно указать номер строки, вместо которой в поток надо добавить новые данные
126+
##
127+
sed '3c\Это ЗАМЕНЁННАЯ строка' ./07_BASH_Sed_file4 # !!! После "i", "a" и "c" ставится ОБРАТНЫЙ слэш
128+
129+
# Если воспользоваться при вызове команды шаблоном в виде обычного текста или регулярного выражения, заменены будут все соответствующие шаблону строки
130+
##
131+
sed '/Это/c Это все ЗАМЕНЁННЫЕ строки!' ./07_BASH_Sed_file4
132+
133+
# Замена символов
134+
# Команда "y" работает с отдельными символами, заменяя их в соответствии с переданными ей при вызове данными
135+
##
136+
sed 'y/123/789/' ./07_BASH_Sed_file5
137+
sed 'y/т/^/' ./07_BASH_Sed_file5
138+
# Используя эту команду, нужно учесть, что она применяется ко всему текстовому потоку, ограничить её конкретными вхождениями символов нельзя
139+
140+
# Вывод номеров строк
141+
##
142+
sed '=' ./07_BASH_Sed_file5
143+
144+
# Вывести только номера строк, соответствующих шаблону
145+
##
146+
sed -n '/тест/=' ./07_BASH_Sed_file5
147+
148+
# Чтение данных для вставки из файла
149+
# Для этого служит команда "r", которая позволяет вставлять в поток данные из указанного файла
150+
# При её вызове можно указать номер строки, после которой надо вставить содержимое файла, или шаблон
151+
##
152+
sed '3r ./07_BASH_Sed_file6' ./07_BASH_Sed_file5 # !!! Сначала указывается файл ОКУДА вставляется, а потом КУДА
153+
154+
# Вставка из файла, при нахождении шаблона
155+
##
156+
sed '/тест/r ./07_BASH_Sed_file6' ./07_BASH_Sed_file5 # !!! Сначала указывается файл ОКУДА вставляется, а потом КУДА
157+
# Содержимое файла будет вставлено после каждой строки, соответствующей шаблону
158+
159+
# Вставить содержимое файла в файл, после определенных символов
160+
##
161+
sed '/###/r ./07_BASH_Sed_file8' ./07_BASH_Sed_file7 # !!! Сначала указывается файл ОКУДА вставляется, а потом КУДА

07_BASH_Sed_file

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Это тест

07_BASH_Sed_file2

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Это тест. Это тест хороший
2+
Это следующий тест. Это тест скрипта
3+

07_BASH_Sed_file3

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/bin/bash

07_BASH_Sed_file4

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Это первый тест
2+
Это второй тест
3+
Это третий тест
4+
Это четвертый тест

07_BASH_Sed_file5

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Это первый тест 1
2+
Это второй тест 2
3+
Это третий тест 3
4+
Это четвертый тест 4

07_BASH_Sed_file6

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
СТРОКА 1 ИЗ НОВОГО ФАЙЛА
2+
СТРОКА 2 ИЗ НОВОГО ФАЙЛА

07_BASH_Sed_file7

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
1
2+
2
3+
323234
4+
43543
5+
###
6+
привет
7+
544665
8+
65756

07_BASH_Sed_file8

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ЭТО ВСТАВКА ИЗ ФАЙЛА ПОСЛЕ ПОИСКОВОГО ШАБЛОНА

07_BASH_mycommands

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
s/Это/То/
2+
s/тест/другой тест/

07_BASH_output

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
То тест. Это тест хороший
2+
То следующий тест. Это тест скрипта

08_BASH_Awk_file

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Это тест
2+
Это второй тест
3+
Это третий тест
4+
Это четвертый тест

08_BASH_Awk_file2

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{print $1 " имеет домашнюю директорию в " $6}

08_BASH_Awk_file3

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
text=" имеет домашнюю директорию в "
3+
print $1 text $6
4+
}

08_BASH_Awk_file4

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
BEGIN {
2+
print "The latest list of users and shells"
3+
print " UserName \t HomePath"
4+
print "-------- \t -------"
5+
FS=":"
6+
}
7+
{
8+
print $1 " \t " $6
9+
}
10+
END {
11+
print "The end"
12+
}

0 commit comments

Comments
 (0)