Я пытаюсь использовать sed для обработки списка имен файлов и замены каждого иностранного символа в имени файла английским эквивалентом. Например.
Малага.txt -> Малага.txt
Мой сценарий следующий:
for f in *.txt
do
newf=$(echo $f | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/')
mv $f $newf
done
В настоящее время это не влияет на имена файлов. Однако, если я использую одно и то же регулярное выражение для обработки текстового файла. Например.
cat blah.txt | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/
Работает отлично - все иностранные символы заменены на их английские эквиваленты. Любая помощь будет принята с благодарностью. Это на Mac OSX в оболочке UNIX.
echo -n 'Ã' | hexdump -C
даст вамc3 83
, когда ls'ing каталог с двумя файлами с именамиÃ
иa
по какой-то причине даст вам41 cc 83
вместоÃ
. Надеюсь, поможет. - person Pavel Gurkov   schedule 18.05.2016