кодесурса
«Linux

Linux - Фильтры

script1adsense2code
script1adsense3code

Вступление

На этом занятии мы рассмотрели наиболее распространенные фильтры системы Linux. Команды, которые создаются для использования с каналом, часто называют фильтрами. Эти фильтры - очень маленькие программы, которые делают одну конкретную вещь очень эффективно. Их можно использовать как строительные блоки. Комбинация простых команд и фильтров в длинной трубе позволяет разрабатывать элегантные решения.

кошка

Когда между двумя каналами, команда cat ничего не делает (кроме помещения stdin на стандартный вывод).

datasoft @ datasoft-linux ~$ tac count | cat | cat | cat |cat |cat
four
three 
two
one 
 datasoft @ datasoft-linux ~$ 
 

тройник

Написание длинных каналов в Unix - это весело, но иногда вам могут потребоваться промежуточные результаты. Тройной фильтр помещает стандартный ввод в стандартный вывод, а также в файл. То есть, он почти такой же, как cat, за исключением того, что у него два идентичных выхода.

datasoft @ datasoft-linux ~$ tac count | tee  temp.txt | tac
one 
two
three 
four
 datasoft @ datasoft-linux ~$ cat temp.txt
four
three 
two
one 
 datasoft @ datasoft-linux ~$ 
 

Grep

В Linux команда grep используется в качестве инструмента поиска и сопоставления с образцом. Наиболее распространенное использование grep - это фильтрация строк текста, содержащих (или не содержащих) определенную строку.

datasoft @ datasoft-linux ~$ cat xyz.txt
raju das
ayan roy
riju saha
dustu saha
ajoy das
 datasoft @ datasoft-linux ~$ cat xyz.txt | grep saha
riju saha
dustu saha
 datasoft @ datasoft-linux ~$
 

Вы можете написать это без кота.

datasoft @ datasoft-linux ~$ cat xyz.txt
raju das
ayan roy
riju saha
dustu saha
ajoy das
 datasoft @ datasoft-linux ~$ cat xyz.txt | grep saha
riju saha
dustu saha
 datasoft @ datasoft-linux ~$ grep saha xyz.txt
riju saha
dustu saha
 datasoft @ datasoft-linux ~$ grep das xyz.txt
raju das
ajoy das
 datasoft @ datasoft-linux ~$
 

Одним из наиболее полезных параметров grep является grep -i, который фильтрует без учета регистра.

datasoft @ datasoft-linux ~$ grep roy xyz.txt
ayan roy
 datasoft @ datasoft-linux ~$ grep -i roy xyz.txt
ayan roy
 datasoft @ datasoft-linux ~$ 

Другой очень полезный параметр - это grep -v, который выводит строки, не соответствующие строке.

datasoft @ datasoft-linux ~$ grep -v dustu xyz.txt
raju das
ayan roy
riju saha
ajoy das
 datasoft @ datasoft-linux ~$
 

И, конечно, оба параметра можно комбинировать для фильтрации всех строк, не содержащих строку без учета регистра.

datasoft @ datasoft-linux ~$ grep -vi das xyz.txt
ayan roy
riju saha
dustu saha
datasoft @ datasoft-linux ~$

С grep -A1 также отображается одна строка после результата.

datasoft @ datasoft-linux ~$ grep -A1 raju xyz.txt
raju das
ayan roy
datasoft @ datasoft-linux ~$

С grep -B1 за одну строку до результата также отображается.

datasoft @ datasoft-linux ~$ grep -B1 riju xyz.txt
ayan roy
riju saha
datasoft @ datasoft-linux ~$ 

С grep -C1 (context) также отображаются одна строка до и одна после. Все три параметра (A, B и C) могут отображать любое количество строк (например, A2, B4 или C20).

datasoft @ datasoft-linux ~$ grep -C1 riju xyz.txt
ayan roy
riju saha
dustu saha
datasoft @ datasoft-linux ~$

резать

Фильтр вырезания используется для вырезания выбранных полей (столбцов) каждой строки файла в зависимости от разделителя или количества байтов. Следующий код использует «cut» для фильтрации имени пользователя и идентификатора пользователя в файле / etc / passwd. Он использует двоеточие в качестве разделителя и выбирает поля 1 и 3.

datasoft @ datasoft-linux ~$ cut -d: -f1,3 /etc/passwd | tail -4
colord:113
hplip:114
pulse:115
datasoft:1000
 datasoft @ datasoft-linux ~$
 

При использовании пробела в качестве разделителя для выреза, вы должны заключить в кавычки пробел.

datasoft @ datasoft-linux ~$ cut -d" " -f1 xyz.txt
raju
ayan
riju
dustu
ajoy
 datasoft @ datasoft-linux ~$
 

В этом примере используется cut, чтобы отобразить второй-седьмой символ / etc / passwd.

datasoft @ datasoft-linux ~$ cut -c2-7 /etc/passwd | tail -4
olord:
plip:x
ulse:x
atasof
 datasoft @ datasoft-linux ~$

тр

Вы можете переводить символы с tr. Следующая команда показывает перевод всех вхождений 'e' в 'E'.

datasoft @ datasoft-linux ~$ cat xyz.txt | tr 'e' 'E'
raju das
ayan roy
riju saha
dustu saha
ajoy das
datasoft @ datasoft-linux ~$ 

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

datasoft @ datasoft-linux ~$ cat xyz.txt | tr 'a-z' 'A-Z'
RAJU DAS
AYAN ROY
RIJU SAHA
DUSTU SAHA
AJOY DAS
datasoft @ datasoft-linux ~$

Здесь мы переводим все новые строки в пробелы.

datasoft @ datasoft-linux ~$ cat count
one 
two
three 
four
datasoft @ datasoft-linux ~$ cat count | tr '\n' ' '
one  two three  four   datasoft @ datasoft-linux ~$

Фильтр tr -s также можно использовать для сжатия нескольких вхождений символа в одно.

datasoft @ datasoft-linux ~$ cat pqr.txt
apple     mango   orange    guava   lemon
 datasoft @ datasoft-linux ~$ cat pqr.txt | tr -s ' '
apple mango orange guava lemon
 datasoft @ datasoft-linux ~$
 

Вы также можете использовать tr для «шифрования» текстов с помощью rot13.

datasoft @ datasoft-linux ~$ cat count | tr 'a-z' 'khkasdkhaskdfhkahskfh'
khs 
fhk
fhsss 
dkhs
 datasoft @ datasoft-linux ~$ cat count | tr 'a-z' 'k-sa-f'
feo 
fff
frfoo 
pfff
 datasoft @ datasoft-linux ~$
 

В последнем примере для удаления символов используется tr -d.

datasoft @ datasoft-linux ~$ cat xyz.txt | tr -d e
raju das
ayan roy
riju saha
dustu saha
ajoy das
 datasoft @ datasoft-linux ~$
 

Туалет

Команда wc используется для подсчета слов, строк и символов для каждого файла

datasoft @ datasoft-linux ~$ wc xyz.txt
 5 10 48 xyz.txt
 datasoft @ datasoft-linux ~$ wc -l xyz.txt
5 xyz.txt
 datasoft @ datasoft-linux ~$ wc -w xyz.txt
10 xyz.txt
 datasoft @ datasoft-linux ~$ wc -c xyz.txt
48 xyz.txt
 datasoft @ datasoft-linux ~$ 
 

Сортировать

Фильтр сортировки (сортировка по алфавиту) используется для сортировки строк текстовых файлов.

datasoft @ datasoft-linux ~$ cat xyz.txt
raju das
ayan roy
riju saha
dustu saha
ajoy das
 datasoft @ datasoft-linux ~$ sort xyz.txt
ajoy das
ayan roy
dustu saha
raju das
riju saha
 datasoft @ datasoft-linux ~$ 
 

Но фильтр сортировки имеет много опций для настройки его использования. В этом примере показана сортировка разных столбцов (столбец 1 или столбец 2).

datasoft @ datasoft-linux ~$ sort -k1 abc.txt
Bihar, Andrapradesh, 90
Burdwan, Bhubaneswar, 20
Delhi, Orrisa, 65
Goa, Gujrat, 45
Kolkata , Karnataka, 15
 datasoft @ datasoft-linux ~$ sort -k2 abc.txt
Bihar, Andrapradesh, 90
Burdwan, Bhubaneswar, 20
Goa, Gujrat, 45
Kolkata , Karnataka, 15
Delhi, Orrisa, 65
 datasoft @ datasoft-linux ~$
 

На приведенном ниже снимке экрана показана разница между сортировкой по алфавиту и числовой сортировкой (обе в третьей колонке).

datasoft @ datasoft-linux ~$ sort -k3 abc.txt
Burdwan, Bhubaneswar, 20
Goa, Gujrat, 45
Delhi, Orrisa, 65
Bihar, Andrapradesh, 90
Kolkata , Karnataka, 15
 datasoft @ datasoft-linux ~$ sort -n -k3 abc.txt
Kolkata , Karnataka, 15
Burdwan, Bhubaneswar, 20
Goa, Gujrat, 45
Delhi, Orrisa, 65
Bihar, Andrapradesh, 90
 datasoft @ datasoft-linux ~$ 
 

уник

Команда uniq используется для пропуска повторяющихся строк в отсортированном списке.

datasoft @ datasoft-linux ~$ cat abc.txt
Kolkata , Karnataka, 15
Burdwan, Bhubaneswar, 20
Goa, Gujrat, 45
Delhi, Orrisa, 65
Bihar, Andrapradesh, 90
datasoft @ datasoft-linux ~$ sort abc.txt
Bihar, Andrapradesh, 90
Burdwan, Bhubaneswar, 20
Delhi, Orrisa, 65
Goa, Gujrat, 45
Kolkata , Karnataka, 15
datasoft @ datasoft-linux ~$ sort abc.txt |uniq
Bihar, Andrapradesh, 90
Burdwan, Bhubaneswar, 20
Delhi, Orrisa, 65
Goa, Gujrat, 45
Kolkata , Karnataka, 15
datasoft @ datasoft-linux ~$

uniq также может подсчитывать вхождения с помощью опции -c.

datasoft @ datasoft-linux ~$ sort abc.txt |uniq -c
      1 Bihar, Andrapradesh, 90
      1 Burdwan, Bhubaneswar, 20
      1 Delhi, Orrisa, 65
      1 Goa, Gujrat, 45
      1 Kolkata , Karnataka, 15
 datasoft @ datasoft-linux ~$
 

Прдч

Сравнивать потоки (или файлы) можно с помощью комм. По умолчанию comm выведет три столбца. В этом примере Abba, Cure и Queen находятся в обоих списках, Боуи и Свит только в первом файле, Тернер только во втором.

datasoft @ datasoft-linux ~$ cat > lebel1.txt
Ape
Bat
Cat
Dog
Mat
Sit
Zip
^C
datasoft @ datasoft-linux ~$ cat > lebel2.txt
Ape
Cat
Dog
Nest
vest
^C
datasoft @ datasoft-linux ~$ comm lebel1.txt lebel2.txt
		Ape
Bat
		Cat
		Dog
Mat
	Nest
Sit
	vest
Zip
 datasoft @ datasoft-linux ~$
 

Вывод comm может быть легче читаться при выводе только одного столбца. Цифры указывают, какие выходные столбцы не должны отображаться.

datasoft @ datasoft-linux ~$ comm -12 lebel1.txt lebel2.txt
Ape
Cat
Dog
 datasoft @ datasoft-linux ~$ comm -13 lebel1.txt lebel2.txt
Nest
vest
 datasoft @ datasoft-linux ~$ comm -23 lebel1.txt lebel2.txt
Bat
Mat
Sit
Zip
 datasoft @ datasoft-linux ~$
  

О.Д.

Европейским людям нравится работать с символами ascii, но компьютеры хранят файлы в байтах. В приведенном ниже примере создается простой файл, а затем используется od для отображения содержимого файла в шестнадцатеричных байтах.

datasoft @ datasoft-linux ~$ cat > sample.txt
ABCDEFGHIJKL
123456789101112
^C
 datasoft @ datasoft-linux ~$ od -t x1 sample.txt
0000000 41 42 43 44 45 46 47 48 49 4a 4b 4c 0a 31 32 33
0000020 34 35 36 37 38 39 31 30 31 31 31 32 0a
0000035
 datasoft @ datasoft-linux ~$
 

Этот же файл также может отображаться в восьмеричных байтах.

datasoft @ datasoft-linux ~$ od -b sample.txt
0000000 101 102 103 104 105 106 107 110 111 112 113 114 012 061 062 063
0000020 064 065 066 067 070 071 061 060 061 061 061 062 012
0000035
 datasoft @ datasoft-linux ~$
 

А вот файл в ascii (или обратно) символов.

datasoft @ datasoft-linux ~$ od -c sample.txt
0000000   A   B   C   D   E   F   G   H   I   J   K   L  \n   1   2   3
0000020   4   5   6   7   8   9   1   0   1   1   1   2  \n
0000035
 datasoft @ datasoft-linux ~$
 

СЕПГ

Sed - это потоковый редактор. Редактор потока используется для выполнения базовых преобразований текста в потоке ввода (файл или ввод из конвейера).

datasoft @ datasoft-linux ~$ echo level5 | sed 's/5/42/'
level42
 datasoft @ datasoft-linux ~$ echo level5 | sed 's/level/high/'
high5
 datasoft @ datasoft-linux ~$
 

Добавьте g для глобальных замен (все вхождения строки в строке).

datasoft @ datasoft-linux ~$ echo level5 level6 | sed 's/level/high/'
high5 level6
 datasoft @ datasoft-linux ~$ echo level5 level6 | sed 's/level/high/g'
high5 high6
datasoft @ datasoft-linux ~$

С помощью d вы можете удалить строки из потока, содержащего символ.

datasoft @ datasoft-linux ~$ cat > cricket.txt
Sachin Tendulkar, Maharastra
Sourav Ganguly, Kolkata
Mahendra singh Dhoni, Jharkhand
Birat Kohili, Delhi
Birendra Sewag, Delhi
Anil Kumble, Chenni
^C
 datasoft @ datasoft-linux ~$ cat cricket.txt | sed '/Delhi/d'
Sachin Tendulkar, Maharastra
Sourav Ganguly, Kolkata
Mahendra singh Dhoni, Jharkhand
Anil Kumble, Chenni
 datasoft @ datasoft-linux ~$ 
 

примеры труб

кто | Туалет

Сколько пользователей вошли в эту систему?

datasoft @ datasoft-linux ~$ who
datasoft :0           2014-08-02 10:51 (:0)
datasoft pts/0        2014-08-02 10:54 (:0)
datasoft pts/7        2014-08-02 10:57 (:0)
datasoft pts/14       2014-08-02 14:10 (:0)
 datasoft @ datasoft-linux ~$ 
 datasoft @ datasoft-linux ~$ who | wc -l
4

кто | вырезать | Сортировать

Показать отсортированный список зарегистрированных пользователей.

datasoft @ datasoft-linux ~$ who | cut -d' ' -f1 | sort
datasoft
datasoft
datasoft
datasoft
 datasoft @ datasoft-linux ~$ 
 

Показать отсортированный список зарегистрированных пользователей, но каждый пользователь только один раз.

 datasoft @ datasoft-linux ~$ who | cut -d' ' -f1 | sort | uniq
datasoft
 datasoft @ datasoft-linux ~$
 

grep | резать

Показать список всех учетных записей пользователей bash на этом компьютере. Аккаунты пользователей подробно объясняются позже.

datasoft @ datasoft-linux ~$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
datasoft:x:1000:1000:datasoft,,,:/home/datasoft:/bin/bash
 datasoft @ datasoft-linux ~$ bash /etc/passwd | cut -d: -f1
/etc/passwd: line 1: root:x:0:0:root:/root:/bin/bash: No such file or directory
/etc/passwd: line 2: daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: No such file or directory
/etc/passwd: line 3: bin:x:2:2:bin:/bin:/usr/sbin/nologin: No such file or directory

Упражнение, практика и решение:

1. Поместите отсортированный список всех пользователей bash в bashusers.txt.

Код:

grep bash /etc/passwd | cut -d: -f1 | sort > bashusers.txt

2. Разместите отсортированный список всех зарегистрированных пользователей в onlineusers.txt.

Код:

who | cut -d' ' -f1 | sort > onlineusers.txt

3. Составьте список всех имен файлов в / etc, которые содержат строку samba.

Код:

ls /etc | grep samba

4. Создайте отсортированный список всех файлов в / etc, которые содержат строку samba без учета регистра.

Код:

ls /etc | grep -i samba | sort

5. Посмотрите на вывод / sbin / ifconfig. Напишите строку, которая отображает только IP-адрес и маску подсети.

Код:

/sbin/ifconfig | head -2 | grep 'inet ' | tr -s ' ' | cut -d' ' -f3,5

6. Напишите строку, которая удаляет все не-буквы из потока.

Код:

datasoft @ datasoft-linux ~$ cat text
This is, yes really! , a text with ?&* too many str$ange# characters ;-)
datasoft @ datasoft-linux ~$ cat text | tr -d ',!$?.*&^%#@;()-'
This is yes really a text with too many strange characters

7. Напишите строку, которая получает текстовый файл и выводит все слова в отдельной строке.

Код:

datasoft @ datasoft-linux ~$ cat text2
it is very cold today without the sun
datasoft @ datasoft-linux ~$ cat text2 | tr ' ' '\n'
it
is
very
cold
today
without
the
sun

8. Напишите проверку орфографии в командной строке. (Может быть словарь в / usr / share /
dict /.)

Код:

datasoft @ datasoft-linux ~$ echo "The zun is shining today" > text
datasoft @ datasoft-linux ~$ cat > DICT
is
shining
sun
the
today
datasoft @ datasoft-linux ~$ cat text | tr 'A-Z ' 'a-z\n' | sort | uniq | comm -23 - DICT
zun
You could also add the solution from question number 6 to remove non-letters, and tr -s '
'to remove redundant spaces.

Предыдущая: перенаправление ввода / вывода в Linux
Далее: Linux Basic Unix инструменты

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code