如何仅对包含 ASCII 字母表的行执行 sed 替换?
How to perform sed replacement to only those lines that contain ASCII alphabets?
我的中文输入法字典文件里有十万多个注音词条。部分投稿者无法输入注音(bopomofo),只能输入拼音(带数字声调)
我写了一个sed脚本,可以自动将这种拼音符号转换为注音。但是,sed 需要很长时间才能对整个文件执行此操作,因为 sed 文件本身很大……将近 500 行正则表达式。
我在想sed是不是只能对那些包含拼音的行触发?
示例输入:
鸞膠續斷 luan2 jiao1 xu4 duan4
鸞駕 luan2 jia4
鸞儔鳳侶 ㄌㄨㄢˊ ㄔㄡˊ ㄈㄥˋ ㄌㄩˇ
鸞輿 ㄌㄨㄢˊ ㄩˊ
鸞鵠停峙 ㄌㄨㄢˊ ㄏㄨˊ ㄊㄧㄥˊ ㄓˋ
鸞飄鳳泊 ㄌㄨㄢˊ ㄆㄧㄠ ㄈㄥˋ ㄅㄛˊ
鸞鶴 ㄌㄨㄢˊ ㄏㄜˋ
鸞鑑 ㄌㄨㄢˊ ㄐㄧㄢˋ
灩澦堆 yan4 yu4 dui1
灩灩 yan4 yan4
籲天 ㄩˋ ㄊㄧㄢ
籲求 ㄩˋ ㄑㄧㄡˊ
籲請 ㄩˋ ㄑㄧㄥˇ
麤服亂頭 ㄘㄨ ㄈㄨˊ ㄌㄨㄢˋ ㄊㄡˊ
麤疏 cu1 shu1
麤糲 cu1 li4
齾齾 ya4 ya4
齉鼻兒 nang4 bi2 er1
㔩葉 e4 ye4
㟏岈 ㄏㄢ ㄒㄧㄚ
㥄遽 ㄌㄧㄥˊ ㄐㄩˋ
㥏墨 ㄊㄧㄢˇ ㄇㄛˋ
㩳身 ㄙㄨㄥˇ ㄕㄣ
㲯毿 ㄌㄢˊ ㄙㄢ
㶁㶁 ㄍㄨㄛˊ ㄍㄨㄛˊ
㶟水 ㄌㄟˊ ㄕㄨㄟˇ
䀇子 gu3 zi5
䈾箕 shao1 ji1
䍪羯 wa4 jie2
䫄外 chua4 wai4
䰐鬖 lan2 san1
䰖兒 zuan3 er1
䰰䰰 ru2 ru2
示例 Bash 命令 (macOS):
sed -i '' -f ./CONV-HYPY2BPMF.SED SAMPLE_INPUT.txt
示例 sed 脚本:
https://github.com/ShikiSuen/vchewing-lingual-data/blob/main/utilities/CONV-HYPY2BPMF.SED
期望的输出:
鸞膠續斷 ㄌㄨㄢˊ ㄐㄧㄠ ㄒㄩˋ ㄉㄨㄢˋ
鸞駕 ㄌㄨㄢˊ ㄐㄧㄚˋ
鸞儔鳳侶 ㄌㄨㄢˊ ㄔㄡˊ ㄈㄥˋ ㄌㄩˇ
鸞輿 ㄌㄨㄢˊ ㄩˊ
鸞鵠停峙 ㄌㄨㄢˊ ㄏㄨˊ ㄊㄧㄥˊ ㄓˋ
鸞飄鳳泊 ㄌㄨㄢˊ ㄆㄧㄠ ㄈㄥˋ ㄅㄛˊ
鸞鶴 ㄌㄨㄢˊ ㄏㄜˋ
鸞鑑 ㄌㄨㄢˊ ㄐㄧㄢˋ
灩澦堆 ㄧㄢˋ ㄩˋ ㄉㄨㄟ
灩灩 ㄧㄢˋ ㄧㄢˋ
籲天 ㄩˋ ㄊㄧㄢ
籲求 ㄩˋ ㄑㄧㄡˊ
籲請 ㄩˋ ㄑㄧㄥˇ
麤服亂頭 ㄘㄨ ㄈㄨˊ ㄌㄨㄢˋ ㄊㄡˊ
麤疏 ㄘㄨ ㄕㄨ
麤糲 ㄘㄨ ㄌㄧˋ
齾齾 ㄧㄚˋ ㄧㄚˋ
齉鼻兒 ㄋㄤˋ ㄅㄧˊ ㄦ
㔩葉 ㄜˋ ㄧㄝˋ
㟏岈 ㄏㄢ ㄒㄧㄚ
㥄遽 ㄌㄧㄥˊ ㄐㄩˋ
㥏墨 ㄊㄧㄢˇ ㄇㄛˋ
㩳身 ㄙㄨㄥˇ ㄕㄣ
㲯毿 ㄌㄢˊ ㄙㄢ
㶁㶁 ㄍㄨㄛˊ ㄍㄨㄛˊ
㶟水 ㄌㄟˊ ㄕㄨㄟˇ
䀇子 ㄍㄨˇ ㄗ˙
䈾箕 ㄕㄠ ㄐㄧ
䍪羯 ㄨㄚˋ ㄐㄧㄝˊ
䫄外 ㄔㄨㄚˋ ㄨㄞˋ
䰐鬖 ㄌㄢˊ ㄙㄢ
䰖兒 ㄗㄨㄢˇ ㄦ
䰰䰰 ㄖㄨˊ ㄖㄨˊ
如果文件中行的顺序无关紧要。
# get lines to be translated
grep '[a-z0-9]' input.txt | sed -f CONV-HYPY2BPMF.SED > output.txt
# append lines that are not to be translated
grep -v '[a-z0-9]' input.txt >> output.txt
我的中文输入法字典文件里有十万多个注音词条。部分投稿者无法输入注音(bopomofo),只能输入拼音(带数字声调)
我写了一个sed脚本,可以自动将这种拼音符号转换为注音。但是,sed 需要很长时间才能对整个文件执行此操作,因为 sed 文件本身很大……将近 500 行正则表达式。
我在想sed是不是只能对那些包含拼音的行触发?
示例输入:
鸞膠續斷 luan2 jiao1 xu4 duan4
鸞駕 luan2 jia4
鸞儔鳳侶 ㄌㄨㄢˊ ㄔㄡˊ ㄈㄥˋ ㄌㄩˇ
鸞輿 ㄌㄨㄢˊ ㄩˊ
鸞鵠停峙 ㄌㄨㄢˊ ㄏㄨˊ ㄊㄧㄥˊ ㄓˋ
鸞飄鳳泊 ㄌㄨㄢˊ ㄆㄧㄠ ㄈㄥˋ ㄅㄛˊ
鸞鶴 ㄌㄨㄢˊ ㄏㄜˋ
鸞鑑 ㄌㄨㄢˊ ㄐㄧㄢˋ
灩澦堆 yan4 yu4 dui1
灩灩 yan4 yan4
籲天 ㄩˋ ㄊㄧㄢ
籲求 ㄩˋ ㄑㄧㄡˊ
籲請 ㄩˋ ㄑㄧㄥˇ
麤服亂頭 ㄘㄨ ㄈㄨˊ ㄌㄨㄢˋ ㄊㄡˊ
麤疏 cu1 shu1
麤糲 cu1 li4
齾齾 ya4 ya4
齉鼻兒 nang4 bi2 er1
㔩葉 e4 ye4
㟏岈 ㄏㄢ ㄒㄧㄚ
㥄遽 ㄌㄧㄥˊ ㄐㄩˋ
㥏墨 ㄊㄧㄢˇ ㄇㄛˋ
㩳身 ㄙㄨㄥˇ ㄕㄣ
㲯毿 ㄌㄢˊ ㄙㄢ
㶁㶁 ㄍㄨㄛˊ ㄍㄨㄛˊ
㶟水 ㄌㄟˊ ㄕㄨㄟˇ
䀇子 gu3 zi5
䈾箕 shao1 ji1
䍪羯 wa4 jie2
䫄外 chua4 wai4
䰐鬖 lan2 san1
䰖兒 zuan3 er1
䰰䰰 ru2 ru2
示例 Bash 命令 (macOS):
sed -i '' -f ./CONV-HYPY2BPMF.SED SAMPLE_INPUT.txt
示例 sed 脚本: https://github.com/ShikiSuen/vchewing-lingual-data/blob/main/utilities/CONV-HYPY2BPMF.SED
期望的输出:
鸞膠續斷 ㄌㄨㄢˊ ㄐㄧㄠ ㄒㄩˋ ㄉㄨㄢˋ
鸞駕 ㄌㄨㄢˊ ㄐㄧㄚˋ
鸞儔鳳侶 ㄌㄨㄢˊ ㄔㄡˊ ㄈㄥˋ ㄌㄩˇ
鸞輿 ㄌㄨㄢˊ ㄩˊ
鸞鵠停峙 ㄌㄨㄢˊ ㄏㄨˊ ㄊㄧㄥˊ ㄓˋ
鸞飄鳳泊 ㄌㄨㄢˊ ㄆㄧㄠ ㄈㄥˋ ㄅㄛˊ
鸞鶴 ㄌㄨㄢˊ ㄏㄜˋ
鸞鑑 ㄌㄨㄢˊ ㄐㄧㄢˋ
灩澦堆 ㄧㄢˋ ㄩˋ ㄉㄨㄟ
灩灩 ㄧㄢˋ ㄧㄢˋ
籲天 ㄩˋ ㄊㄧㄢ
籲求 ㄩˋ ㄑㄧㄡˊ
籲請 ㄩˋ ㄑㄧㄥˇ
麤服亂頭 ㄘㄨ ㄈㄨˊ ㄌㄨㄢˋ ㄊㄡˊ
麤疏 ㄘㄨ ㄕㄨ
麤糲 ㄘㄨ ㄌㄧˋ
齾齾 ㄧㄚˋ ㄧㄚˋ
齉鼻兒 ㄋㄤˋ ㄅㄧˊ ㄦ
㔩葉 ㄜˋ ㄧㄝˋ
㟏岈 ㄏㄢ ㄒㄧㄚ
㥄遽 ㄌㄧㄥˊ ㄐㄩˋ
㥏墨 ㄊㄧㄢˇ ㄇㄛˋ
㩳身 ㄙㄨㄥˇ ㄕㄣ
㲯毿 ㄌㄢˊ ㄙㄢ
㶁㶁 ㄍㄨㄛˊ ㄍㄨㄛˊ
㶟水 ㄌㄟˊ ㄕㄨㄟˇ
䀇子 ㄍㄨˇ ㄗ˙
䈾箕 ㄕㄠ ㄐㄧ
䍪羯 ㄨㄚˋ ㄐㄧㄝˊ
䫄外 ㄔㄨㄚˋ ㄨㄞˋ
䰐鬖 ㄌㄢˊ ㄙㄢ
䰖兒 ㄗㄨㄢˇ ㄦ
䰰䰰 ㄖㄨˊ ㄖㄨˊ
如果文件中行的顺序无关紧要。
# get lines to be translated
grep '[a-z0-9]' input.txt | sed -f CONV-HYPY2BPMF.SED > output.txt
# append lines that are not to be translated
grep -v '[a-z0-9]' input.txt >> output.txt