2016-05-18 3 views
2

私はファイル名のリストを処理し、ファイル名のすべての外国人の文字を英語の同等語で置き換えることを試みています。例えば。外国語の文字を英語のファイル名に置き換えて、UNIXのBashスクリプト

málaga.txt - > malaga.txt

私のスクリプトは、次のとおりです。

for f in *.txt 
do 
    newf=$(echo $f | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/') 
    mv $f $newf 
done 

これは、現在のファイル名には影響しません。しかし、私はテキストファイルを処理するために、同じ正規表現を使用する場合。例えば。

cat blah.txt | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/ 

これは完全に機能します。すべての外字は、同等の英語に置き換えられています。どんな助けでも大歓迎です。これは、UNIXシェルのMac OSX上にあります。

+0

ニースの1が、外国の文字は何でしょうか?教えてください;) – sjsam

+0

私はこれらのような文字の意味:āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ – Binaromong

+0

あなたに外国語がいくつかの他にネイティブであるかもしれないが、私が何を意味するのかです。さらに説明する必要はありません。ご質問あなたが達成しようとしているかについてかなり明確です:) – sjsam

答えて

1

これはそれを行う必要があります。

for f in *.txt; do 
    newf=$(echo $f | iconv -f utf-8-mac -t utf-8 | sed 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/') 
    mv $f $newf 
done 

iconv -f utf-8-mac -t utf-8は@PavelGurkovと@ninjaljでコメントで述べた合成済み/分解の問題を解決し、UTF-8にUTF-8-MACからテキストを変換します。

+0

これは完全に機能します。ありがとう:-) – Binaromong

関連する問題