Это не совсем то, о чем вы просили, но вы можете создавать скрипты vim с вашим содержимым. Начнем с простого случая:
$ cat noendspaces
#!/usr/bin/vim -s
:%s/ *$//
:r ! echo "\#last changed by $USER in :" `date`
:x
а потом...
$ chmod 755 noendspaces
$ for a in file*.txt
do
./noendspaces $a
done
Я не думаю, что idn
имеет какие-либо переключатели для пропуска недопустимых строк вместо выхода с ошибкой, поэтому единственный оставшийся вариант — перезапустить его после ожидаемой ошибки:
idn_skip(){
while ! error=$(idn 2>&1 >&3); do
case $error in *'Punycode failed'*|*'Output would be too large'*) ;; # restart
*) break;;
esac
done 3>&1
}
idn_skip < domain_list
Это уродливо и глупо и не будет работать при чтении списка доменов из -недоступного для поиска файла (, который можно исправить в стиле bash -, запустив его как stdbuf -i1 idn
, но это будет только сделать это еще более смешным ).
Вместо того, чтобы пытаться преодолеть idn
ограничения, я бы посоветовал использовать Net::LibIDN
пакет perl(apt-get install libnet-libidn-perl
в Debian )и написать все это на Perl.