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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования Π½Π° языкС сцСнариСв ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 40

Автор МСндСль ΠšΡƒΠΏΠ΅Ρ€

do

output=$(sed -n /"$1"/p $file) # ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄.


if [ ! -z "$output" ] # Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ "$output" ΡƒΠ±Ρ€Π°Ρ‚ΡŒ?

then

echo -n "$file: "

echo $output

fi # эквивалСнт: sed -ne "/$1/s|^|${file}: |p"


echo

done


echo


exit 0


# УпраТнСния:

# ---------

# 1) Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ символов ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, Ссли Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ совпадСния Π² любом ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ².

# 2) Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

egrep -- Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ grep -E. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ.

fgrep -- Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ grep -F. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° выполняСт поиск строк символов (Π½Π΅ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ), Ρ‡Ρ‚ΠΎ нСсколько ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поиска.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° agrep ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности поиска ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… совпадСний. ΠžΠ±Ρ€Π°Π·Π΅Ρ† поиска ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ строки Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ число символов.

Для поиска ΠΏΠΎ сТатым Ρ„Π°ΠΉΠ»Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ zgrep, zegrep ΠΈΠ»ΠΈ zfgrep. Они с успСхом ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ для Π½Π΅ сТатых Ρ„Π°ΠΉΠ»ΠΎΠ², Π½ΠΎ Π² этом случаС ΠΎΠ½ΠΈ ΡƒΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² скорости ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ grep, egrep ΠΈ fgrep. Они ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ поиска ΠΏΠΎ ΡΠΌΠ΅ΡˆΠ΅Π½Π½ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² -- ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ сТаты, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π΅Ρ‚.

Для поиска ΠΏΠΎ bzip-Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ bzgrep.

look

Команда look ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° grep, ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для поиска ΠΏΠΎ "словарям" -- отсортированным Ρ„Π°ΠΉΠ»Π°ΠΌ. По-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, поиск выполняСтся Π² Ρ„Π°ΠΉΠ»Π΅ /usr/dict/words, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-13. Поиск слов Π² словарС

#!/bin/bash

# lookup: ВыполняСтся поиск ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слова ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² словарС.


file=words.data # Π€Π°ΠΉΠ» с искомыми словами.


echo


while [ "$word" != end ] # ПослСднСС слово Π² Ρ„Π°ΠΉΠ»Π΅.

do

read word # Из Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ†ΠΈΠΊΠ»Π°.

look $word > /dev/null # ПодавлСниС Π²Ρ‹Π²ΠΎΠ΄Π° строк ΠΈΠ· словаря.

lookup=$? # Код Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ 'look'.


if [ "$lookup" -eq 0 ]

then

echo "Π‘Π»ΠΎΠ²ΠΎ \"$word\" Π½Π°ΠΉΠ΄Π΅Π½ΠΎ."

else

echo "Π‘Π»ΠΎΠ²ΠΎ \"$word\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ."

fi


done <"$file" # ΠŸΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π° $file, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ "Ρ‡Ρ‚Π΅Π½ΠΈΠ΅" производится ΠΎΡ‚Ρ‚ΡƒΠ΄Π°.


echo


exit 0


# ----------------------------------------------------------------

# Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, располоТСнныС Π½ΠΈΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ исполнСны, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ΡˆΠ΅ стоит ΠΊΠΎΠΌΠ°Π½Π΄Π° "exit".


# Stephane Chazelas ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:


while read word && [[ $word != end ]]

do if look "$word" > /dev/null

then echo "Π‘Π»ΠΎΠ²ΠΎ \"$word\" Π½Π°ΠΉΠ΄Π΅Π½ΠΎ."

else echo "Π‘Π»ΠΎΠ²ΠΎ \"$word\" Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ."

fi

done <"$file"


exit 0

sed, awk

Π‘ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Ρ‹Π΅ языки, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ для Π°Π½Π°Π»ΠΈΠ·Π° тСкстовых Π΄Π°Π½Π½Ρ‹Ρ….

sed

НСинтСрактивный "ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€". Π¨ΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сцСнариях Π½Π° языкС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

awk

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° контСкстного поиска ΠΈ прСобразования тСкста, Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт для извлСчСния ΠΈ/ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ (ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ) Π² структурированных тСкстовых Ρ„Π°ΠΉΠ»Π°Ρ…. Бинтаксис awk Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ язык C.

wc

wc -- "word count", счСтчик слов Π² Ρ„Π°ΠΉΠ»Π΅ ΠΈΠ»ΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅:

bash $ wc /usr/doc/sed-3.02/README

20 127 838 /usr/doc/sed-3.02/README

[20 строк 127 слов 838 символов]


wc -w подсчитываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слова.

wc -l подсчитываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки.

wc -c подсчитываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы.

wc -L Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ наибольшСй строки.

ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ количСства .txt-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ wc:

$ ls *.txt | wc -l

# Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΈΠΌΠ΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ² "*.txt" Π½Π΅Ρ‚ символа ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.


# ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

# find . -maxdepth 1 -name \*.txt -print0 | grep -cz .

# (shopt -s nullglob; set -- *.txt; echo $#)


# Бпасибо S.C.


ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ², Ρ‡ΡŒΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с символов, Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ d - h

bash$ wc [d-h]* | grep total | awk '{print $3}'

71832


ΠžΡ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π² случаС, Ссли Ρƒ вас локаль ΠΎΡ‚Π»ΠΈΡ‡Π½Π° ΠΎΡ‚ "C", Ρ‚ΠΎ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ wc Π²Π΅Ρ€Π½Π΅Ρ‚ Π½Π΅ слово "total", Π² ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‹Π²ΠΎΠ΄Π°, Π° "ΠΈΡ‚ΠΎΠ³ΠΎ". Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

bash$ wc [d-h]* | grep ΠΈΡ‚ΠΎΠ³ΠΎ | awk '{print $3}'

71832


ИспользованиС wc для подсчСта количСства Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ слова "Linux" Π² основной исходный Ρ„Π°ΠΉΠ» с тСкстом этого руководства.

bash$ grep Linux abs-book.sgml | wc -l

50


Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-30 ΠΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 16-7.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ wc Π² Π²ΠΈΠ΄Π΅ своих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

... | grep foo | wc -l

# Часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰Π°ΡΡΡ конструкция, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сокращСна.


... | grep -c foo

# ΠšΠ»ΡŽΡ‡ "-c" ("--count") ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep.


# Бпасибо S.C.


tr

Π—Π°ΠΌΠ΅Π½Π° ΠΎΠ΄Π½ΠΈΡ… символов Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π’ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… случаях символы Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈ/ΠΈΠ»ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. ΠšΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ. ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ.

Команда tr "A-Z" "*" <filename ΠΈΠ»ΠΈ tr A-Z \* <filename замСняСт всС символы Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра Π² filename Π½Π° Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ (Π²Ρ‹Π²ΠΎΠ΄ производится Π½Π° stdout). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ нСработоспособным, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ tr A-Z '[**]'.

ΠšΠ»ΡŽΡ‡ -d удаляСт символы ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°.

echo "abcdef" # abcdef

echo "abcdef" | tr -d b-d # aef


tr -d 0-9 <filename

# Π£Π΄Π°Π»ΠΈΡ‚ всС Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ символы ΠΈΠ· Ρ„Π°ΠΉΠ»Π° "filename".


ΠšΠ»ΡŽΡ‡ --squeeze-repeats (-s) ΡƒΠ΄Π°Π»ΠΈΡ‚ всС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ символов. ΠœΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для удалСния Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов.

bash$ echo "XXXXX" | tr --squeeze-repeats 'X'

X


ΠšΠ»ΡŽΡ‡ -c "complement" Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ символы Π² соотвСтствии с шаблоном. Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ воздСйствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‚Π΅ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ НЕ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

bash$ echo "acfdeb123" | tr -c b-d +

+c+d+b++++


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠΌΠ°Π½Π΄Π° tr ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ распознаСт ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ классы POSIX[ 29 ].

bash$ echo "abcd2ef1" | tr '[:alpha:]' -

----2--1


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-14. toupper: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.

#!/bin/bash

# ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.


E_BADARGS=65


if [ -z "$1" ] # Бтандартная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

then

echo "ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ использования: `basename $0` filename"

exit $E_BADARGS

fi


tr a-z A-Z <"$1"


# Π’ΠΎΡ‚ ΠΆΠ΅ эффСкт ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ использовании ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классов POSIX:

# tr '[:lower:]' '[:upper:]' <"$1"

# Бпасибо S.C.


exit 0

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 12-15. lowercase: ИзмСнСниС ΠΈΠΌΠ΅Π½ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр.

#! /bin/bash

#

# Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ всС ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π² Π½ΠΈΠΆΠ½ΠΉ рСгистр.

#


for filename in * # ΠžΠ±Ρ…ΠΎΠ΄ всСх Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

do

fname=`basename $filename`

n=`echo $fname | tr A-Z a-z` # ΠŸΠ΅Ρ€Π΅Π²Π΅ΡΡ‚ΠΈ символы Π² Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр.

if [ "$fname" != "$n" ] # ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… измСнились.

then

mv $fname $n

fi

done


exit 0


# Π‘ΠΈΡ€ΠΎΠΊΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ΡˆΠ΅ стоит ΠΊΠΎΠΌΠ°Π½Π΄Π° "exit".

#--------------------------------------------------------#

# ЗапуститС эту Ρ‡Π°ΡΡ‚ΡŒ сцСнария, ΡƒΠ΄Π°Π»ΠΈΠ² строки , стоящиС Π²Ρ‹ΡˆΠ΅.


# Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ², содСрТащими ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈΠ»ΠΈ символы ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки.


# Π’ связи с этим, Stephane Chazelas ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:


for filename in * # НСт нСобходимости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ basename,

# ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ "*" Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π°, Π½Π΅ содСрТащиС "/".