Иногда мне нужно искать файлы с акцентированными символами (обычно диакритические), обычно с помощью locate / mlocate. Я хочу настроить (возможно, в /etc/updatedb.conf), поэтому он позволяет мне искать специальные символы с использованием определенного языкового сопоставления, например:
a == âàáäÂÀÂÄ
e == êèéëÊÈÉË
i == îïíÎÏ
o == ôöóÔÖ
u == ûùüÛÜÙ
c == çÇ
n == ñ
Так locate -i liberación также искать файлы со строкой liberacion и даже свобода.
Если мы посмотрим на updatedb.conf(5), мы обнаружим, что мы ничего не можем сделать с элементами конфигурации.
Итак, мы собираемся написать скрипт, используя locate; В конце мы можем запустить что-то вроде my-locate.sh liberacion или my-locate.sh liberâciòn, и это принесет нам все возможные комбинации.
Сначала создайте простой файл как нашу базу данных где угодно, например: ~/.mydb; затем добавьте ваши символы акцентов в этот файл следующим образом:
aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...
Тогда нам нужен небольшой скрипт, который выполняет эту работу для нас, я написал простой:
#!/bin/bash
# Final search term
STR=""
# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do
# Split the string in one char
CH="${1:$i:1}"
# Find all possible combinations of this char
CHARS=$(grep "$CH" ~/.mydb)
# Add an "or" operator between characters
REG=$(echo "$CHARS" | sed 's/.\{1\}/&\|/g' )
REG="($REG)"
# Append all possible combination of this character
# to our final search term as an or statement
if [ "$REG" == '()' ];
then
STR=$STR$CH
else
STR=$STR$REG
fi
done
# locate it using regex
locate --regex "$STR$"
Теперь сохраните его где-нибудь в вашей PATH с нужным именем, например: в ~/bin. Это будет уже в вашей среде PATH.
В конце концов, просто используйте что-то подобное для поиска всех возможных комбинаций.
my-locate.sh liberacion
найдет для меня все это:
~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn
Если мы посмотрим на updatedb.conf(5), мы обнаружим, что мы ничего не можем сделать с элементами конфигурации.
Итак, мы собираемся написать скрипт, используя locate; В конце мы можем запустить что-то вроде my-locate.sh liberacion или my-locate.sh liberâciòn, и это принесет нам все возможные комбинации.
Сначала создайте простой файл как нашу базу данных где угодно, например: ~/.mydb; затем добавьте ваши символы акцентов в этот файл следующим образом:
aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...
Тогда нам нужен небольшой скрипт, который выполняет эту работу для нас, я написал простой:
#!/bin/bash
# Final search term
STR=""
# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do
# Split the string in one char
CH="${1:$i:1}"
# Find all possible combinations of this char
CHARS=$(grep "$CH" ~/.mydb)
# Add an "or" operator between characters
REG=$(echo "$CHARS" | sed 's/.\{1\}/&\|/g' )
REG="($REG)"
# Append all possible combination of this character
# to our final search term as an or statement
if [ "$REG" == '()' ];
then
STR=$STR$CH
else
STR=$STR$REG
fi
done
# locate it using regex
locate --regex "$STR$"
Теперь сохраните его где-нибудь в вашей PATH с нужным именем, например: в ~/bin. Это будет уже в вашей среде PATH.
В конце концов, просто используйте что-то подобное для поиска всех возможных комбинаций.
my-locate.sh liberacion
найдет для меня все это:
~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn
Если мы посмотрим на updatedb.conf(5), мы обнаружим, что мы ничего не можем сделать с элементами конфигурации.
Итак, мы собираемся написать скрипт, используя locate; В конце мы можем запустить что-то вроде my-locate.sh liberacion или my-locate.sh liberâciòn, и это принесет нам все возможные комбинации.
Сначала создайте простой файл как нашу базу данных где угодно, например: ~/.mydb; затем добавьте ваши символы акцентов в этот файл следующим образом:
aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...
Тогда нам нужен небольшой скрипт, который выполняет эту работу для нас, я написал простой:
#!/bin/bash
# Final search term
STR=""
# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do
# Split the string in one char
CH="${1:$i:1}"
# Find all possible combinations of this char
CHARS=$(grep "$CH" ~/.mydb)
# Add an "or" operator between characters
REG=$(echo "$CHARS" | sed 's/.\{1\}/&\|/g' )
REG="($REG)"
# Append all possible combination of this character
# to our final search term as an or statement
if [ "$REG" == '()' ];
then
STR=$STR$CH
else
STR=$STR$REG
fi
done
# locate it using regex
locate --regex "$STR$"
Теперь сохраните его где-нибудь в вашей PATH с нужным именем, например: в ~/bin. Это будет уже в вашей среде PATH.
В конце концов, просто используйте что-то подобное для поиска всех возможных комбинаций.
my-locate.sh liberacion
найдет для меня все это:
~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn
Если мы посмотрим на updatedb.conf(5), мы обнаружим, что мы ничего не можем сделать с элементами конфигурации.
Итак, мы собираемся написать скрипт, используя locate; В конце мы можем запустить что-то вроде my-locate.sh liberacion или my-locate.sh liberâciòn, и это принесет нам все возможные комбинации.
Сначала создайте простой файл как нашу базу данных где угодно, например: ~/.mydb; затем добавьте ваши символы акцентов в этот файл следующим образом:
aâàáäÂÀÂÄ
eêèéëÊÈÉË
iîïíÎÏ
uûùüÛÜÙ
cçÇ
oôöóÔÖóòòò
...
...
Тогда нам нужен небольшой скрипт, который выполняет эту работу для нас, я написал простой:
#!/bin/bash
# Final search term
STR=""
# Loop throughout all characters of desired string
for (( i=0; i<${#1}; i++ )); do
# Split the string in one char
CH="${1:$i:1}"
# Find all possible combinations of this char
CHARS=$(grep "$CH" ~/.mydb)
# Add an "or" operator between characters
REG=$(echo "$CHARS" | sed 's/.\{1\}/&\|/g' )
REG="($REG)"
# Append all possible combination of this character
# to our final search term as an or statement
if [ "$REG" == '()' ];
then
STR=$STR$CH
else
STR=$STR$REG
fi
done
# locate it using regex
locate --regex "$STR$"
Теперь сохраните его где-нибудь в вашей PATH с нужным именем, например: в ~/bin. Это будет уже в вашей среде PATH.
В конце концов, просто используйте что-то подобное для поиска всех возможных комбинаций.
my-locate.sh liberacion
найдет для меня все это:
~/lab/liberacion
~/lab/liberaciòn
~/lab/liberación
~/lab/liberâciòn
~/lab/liberäciòn
~/lab/libÈrâciòn