Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Командная строка LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 69

Автор Шоттс Уильям

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² diff-Ρ„Π°ΠΉΠ», Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ старому Ρ„Π°ΠΉΠ»Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ:

patch < diff_Ρ„Π°ΠΉΠ»

ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ нашСго тСстового Ρ„Π°ΠΉΠ»Π°:

[[email protected] ~]$ diff -Naur file1.txt file2.txt > patchfile.txt

[[email protected] ~]$ patch < patchfile.txt

patching file file1.txt

[[email protected] ~]$ cat file1.txt

b

c

d

e

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создали diff-Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ patchfile.txt ΠΈ Π·Π°Ρ‚Π΅ΠΌ воспользовались ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ patch, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ (Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Β«Π·Π°ΠΏΠ»Π°Ρ‚ΡƒΒ»). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ diff-Ρ„Π°ΠΉΠ» (Π² ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅) ΡƒΠΆΠ΅ содСрТит ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅. ПослС налоТСния Β«Π·Π°ΠΏΠ»Π°Ρ‚Ρ‹Β» содСрТимоС file1.txt Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт содСрТимому file2.txt.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° patch ΠΈΠΌΠ΅Π΅Ρ‚ большоС число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π° ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт мноТСство Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π² ΠΏΡ€Π°Π²ΠΊΠ΅ Β«Π·Π°ΠΏΠ»Π°Ρ‚Β» (diff-Ρ„Π°ΠΉΠ»ΠΎΠ²).

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π»Π΅Ρ‚Ρƒ

Наш ΠΎΠΏΡ‹Ρ‚ использования тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ограничиваСтся Π² основном ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ способом ΠΈΡ… использования, Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅ΠΌ курсор Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ мСсто ΠΈ Π·Π°Ρ‚Π΅ΠΌ вносим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ способы рСдактирования тСкста. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠ΅Ρ€ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊ мноТСству Ρ„Π°ΠΉΠ»ΠΎΠ² всСго ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

tr β€” ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ символов

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° tr ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСкодирования символов. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠ΅ΠΎΠ±Ρ€Π°Π·Π½ΡƒΡŽ ΠΏΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ поиска с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ. ΠŸΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это процСсс Π·Π°ΠΌΠ΅Π½Ρ‹ символов ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° символами ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Π°. НапримСр, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов ΠΈΠ· Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ β€” это ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π°ΠΊΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tr:

[[email protected] ~]$ echo "lowercase letters" | tr a-z A-Z

LOWERCASE LETTERS

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, tr ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ исходныС Π΄Π°Π½Π½Ρ‹Π΅ со стандартного Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. tr ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: мноТСство символов, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ мноТСство символов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΡ‹Π΅ символы. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° символов ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ трСмя способами:

β€’ Π² Π²ΠΈΠ΄Π΅ списка-пСрСчислСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ABCDEFGHIJKLMNOPQRSTUVWXYZ;

β€’ Π² Π²ΠΈΠ΄Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° символов, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ A-Z. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этому способу ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‡Ρ‚ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… (ΠΈΠ·-Π·Π° Ρ€Π°Π·Π½ΠΎΠ³ΠΎ порядка Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΉ сортировки Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π³ΠΈΠΎΠ½Π°Ρ…), ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ;

β€’ Π² Π²ΠΈΠ΄Π΅ классов символов POSIX, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ [:upper:].

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв мноТСства символов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ; Ρ‡Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ допустимо Π² случаС, Ссли ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мноТСство оказываСтся большС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли сущСствуСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ прСобразования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… символов Π² ΠΎΠ΄ΠΈΠ½:

[[email protected] ~]$ echo "lowercase letters" | tr [:lower:] A

AAAAAAAAA AAAAAAA

ΠšΡ€ΠΎΠΌΠ΅ пСрСкодирования tr позволяСт просто ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ символы ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’Ρ‹ΡˆΠ΅ Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ обсуТдали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ прСобразования тСкстовых Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ MS-DOS Π² тСкст Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Unix. Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ прСобразования достаточно просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ символы Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. Π­Ρ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tr:

tr -d '\r' < Ρ„Π°ΠΉΠ»_dos > Ρ„Π°ΠΉΠ»_unix

Π³Π΄Π΅ Ρ„Π°ΠΉΠ»_dos β€” это Ρ„Π°ΠΉΠ», ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ, Π° Ρ„Π°ΠΉΠ»_unix β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’ этой Ρ„ΠΎΡ€ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ экранированная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ \r, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈ классов символов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ tr, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅

[[email protected]inuxbox ~]$ tr --help

ROT13: Π½Π΅ самый Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ

Одно Π·Π°Π±Π°Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ tr β€” ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкста ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ROT13. ROT13 β€” Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, основанный Π½Π° простом подстановочном ΡˆΠΈΡ„Ρ€Π΅. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π°Π·Π²Π°Ρ‚ΡŒ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с большой натяТкой, скорСС это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ обфускации (запутывания) тСкста. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° для запутывания ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ уязвимого содСрТимого. ΠœΠ΅Ρ‚ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² простом смСщСнии ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ символа Π½Π° 13 ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ число 13 соотвСтствуСт сСрСдинС Π½Π°Π±ΠΎΡ€Π° ΠΈΠ· 26 символов, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΊ тСксту ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π³ΠΎ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π² исходноС состояниС. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ tr выполняСтся, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

echo "secret text" | tr a-zA-Z n-za-mN-ZA-M

frperg grkg

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ:

echo "frperg grkg" | tr a-zA-Z n-za-mN-ZA-M

secret text

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с элСктронной ΠΏΠΎΡ‡Ρ‚ΠΎΠΉ ΠΈ чтСния новостСй Usenet ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ ROT13. Π’ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅: http://ru.wikipedia.org/wiki/ROT13.

tr Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Ρ€ΡŽΠΊΠΈ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -s ΠΊΠΎΠΌΠ°Π½Β­Π΄Π° tr «сТимаСт» (squeeze), ΠΈΠ»ΠΈ удаляСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ экзСмпляры символов:

[[email protected] ~]$ echo "aaabbbccc" | tr -s ab

abccc

Π—Π΄Π΅ΡΡŒ Ρƒ нас имССтся строка с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ символами. ΠŸΠ΅Ρ€Π΅Π΄Π°Π² мноТСство ab ΠΊΠΎΠΌΠ°Π½Π΄Π΅ tr, ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ экзСмпляры символов, входящиС Π² мноТСство, ΠΏΡ€ΠΈ этом ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ символы (c), ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² мноТСствС, ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ символы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ подряд. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС сТатиС Π½Π΅ даст Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта:

[[email protected] ~]$ echo "abcabcabc" | tr -s ab

abcabcabc

sed β€” ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΈ прСобразования тСкста

Имя sed β€” это сокращСнноС словосочСтаниС stream editor (ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€). Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° осущСствляСт Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ° тСкста, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ· мноТСства Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° стандартный Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. sed β€” мощная ΠΈ достаточно слоТная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (Π΅ΠΉ посвящСны Ρ†Π΅Π»Ρ‹Π΅ ΠΊΠ½ΠΈΠ³ΠΈ), поэтому здСсь ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²ΠΎ всСх подробностях.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС sed ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π΅ΠΉ пСрСдаСтся СдинствСнная ΠΊΠΎΠΌΠ°Π½Π΄Π° рСдактирования (Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС) ΠΈΠ»ΠΈ имя Ρ„Π°ΠΉΠ»Π° сцСнария с мноТСством ΠΊΠΎΠΌΠ°Π½Π΄, ΠΈ ΠΎΠ½Π° примСняСт эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ тСкста. НиТС приводится ΠΎΡ‡Π΅Π½ΡŒ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ sed Π² дСйствии:

[[email protected] ~]$ echo "front" | sed 's/front/back/'

back

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ echo создаСтся ΠΏΠΎΡ‚ΠΎΠΊ тСкста с СдинствСнным словом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρƒ пСрСдаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ sed. sed, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, примСняСт ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ s/front/back/ ΠΊ тСксту Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ подстановки (поиск с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ) Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ vi.

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ sed Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с СдинствСнной Π±ΡƒΠΊΠ²Ρ‹. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, рассмотрСнном Π²Ρ‹ΡˆΠ΅, Π±ΡƒΠΊΠ²Π° s прСдставляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ подстановки (substitution). Π—Π° Π½Π΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ искомая строка ΠΈ строка Π·Π°ΠΌΠ΅Π½Ρ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ слСшСм. Π’ качСствС раздСлитСля ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ символы. По общСпринятому соглашСнию, Ρ‡Π°Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ слСша, Π½ΠΎ sed Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС раздСлитСля любой символ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сразу Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ. Π’Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Π°Ρ‡Π΅:

[[email protected] ~]$ echo "front" | sed 's_front_back_'

back

Π‘ΠΈΠΌΠ²ΠΎΠ» подчСркивания, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сразу Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, становится Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ употрСблСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄ Π² sed ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ строки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Если адрСс отсутствуСт, ΠΊΠΎΠΌΠ°Π½Π΄Π° рСдактирования примСняСтся ΠΊΠΎ всСм строкам Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅. Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС адрСс β€” это Π½ΠΎΠΌΠ΅Ρ€ строки. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π² наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€: