看板 Linux 關於我們 聯絡資訊
大家好,我知道在tty顯示中文很麻煩,所以我想知道在亂碼背後的顯示模式 問題是這樣的: 我有50萬個檔案要處理,格式大概是 501025_ID.txt 因為一開始沒限制作業ID只能用英文,所以有幾個中文ID混入 LINUX顯示如下 502222_123.txt 503312_??+??.txt (為中文所顯示的亂碼) 507832_cher.txt 503878_-?{D.txt (為中文所顯示的亂碼) 要把中文的ID換成英數比較好處理 所以我用 find . -regextype egrep -regex ".*_[^[:alnum:]].*" 或是改用 -------------------------------".*_\?\?\+\?\?.*" 都沒辦法抓出任何一條Orz 想請問的是,怎麼樣可以知道linux實際上對那字元的認知是什麼? 或是,有認何方式可以直接把這些中文亂碼換成可見的英數文字嗎? 例如: 我 \u{num} 謝謝 Dan -- 不過是人 http://www.facebook.com/twaiting -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 124.155.187.95 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1435840252.A.199.html
bitlife: 直接用wildcard來更改檔名會不會好一點? 07/02 20:52
是用「*」嗎?
danny8376: 我覺得大概是big5編碼檔名吧? 07/02 22:36
我用big5內碼去search,無法匹配,看起來好像不是
losepacific: find . -regextype egrep -regex \ 07/03 00:22
losepacific: '..*[^a-zA-Z0-9_-.)( /][^a-zA-Z0-9_-.)( /]*..*' 07/03 00:22
losepacific: 剛剛測試find的正規表示,寫了這麼長才抓到直中文名 07/03 00:23
losepacific: 中文檔名改碼或許可以找找關鍵字urlencode 07/03 00:26
losepacific: python2 -c "import urllib, sys 07/03 00:27
losepacific: print urllib.quote(sys.argv[1])" 4567889-我.txt 07/03 00:29
losepacific: 在utf8環境下會輸出4567889-%E6%88%91.txt 07/03 00:29
losepacific: perl -MURI::Escape -e 'print 07/03 01:29
losepacific: uri_escape($ARGV[0])."\n";' "123-稍快.txt" 07/03 01:29
losepacific: 2> /dev/null 07/03 01:30
losepacific: 在utf8環境下會輸出123-%E7%A8%8D%E5%BF%AB.txt 07/03 01:31
謝謝,我試著search這些關鍵字 今天試了一下,有個檔名是 501111_我愛PTT.txt 顯示為 501111_??+?{PTT.txt 用 .* 可以找的到 用 .*_.*PTT.* 變找不到了 表示中文無法匹配點號嗎? 但.*又可以匹配Orz
bitlife: 你的linux有原生支援中文嗎? 原則上在中文utf-8環境,句點 07/03 11:13
bitlife: 可以match中文,那些亂碼已不是中文字,所以.只能match一字 07/03 11:14
bitlife: 元 07/03 11:14
bitlife: 另外你的第2個regex,有greedy的問題,要使用修飾,我比較熟 07/03 11:15
bitlife: 程式語語用的regex, command line的不是很確定 07/03 11:16
bitlife: 抱歉,我看錯了,上面15,16分的推文請忽略 07/03 11:18
謝謝,我試試把整個系統改成zh_TW.utf8看看 做為小菜鳥,我放棄在LINUX上做了一.一 用find . -regextype egrep -regex ".*_[[:alnum:]].*"|xargs -i mv {} ./file 把所有正確的檔抓出來 剩的拉到windows上修改檔名 ※ 編輯: cherubx (61.66.243.96), 07/03/2015 16:29:58