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,
# ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ "*" Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π°, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ "/".