我的文件是utf8,但包含几个latin1字符,即其他外语。我的目标是使用Unix命令删除这些字符。早些时候,当我试图通过删除所有非ASCII字符来实现此目的时,下面的命令继续执行并删除了所有重音字符。我想在保留重音字符的同时,只想从文件中删除非英语(普通话、日语、韩语、泰语、阿拉伯语)的术语。
grep --color='auto' -P -n "[\x80-\xFF]" file.txt -> this command helped me remove non-ASCII chars but it also removes the accented chars(í, æ, Ö etc)...is it possible to get
888|Jobin|Matt|NORMALSQ|YUOZ|IOP|OPO|洁|ID12|doorbell|geo@xyx.comd
1011|ICE|LAND|邵|DUY|DUY|123|EOP|dataset1|geo@xyx.com
53101|炜|GUTTI|RR|Hi|London|UK|WLU|GB|dataset1|陈
สัอ |JOH|LIU|ABC|DUY|DUY|57T2P|EOP|unknown|geo@xyx.com
เมื่รกเริ่ม|JOH|LIU|ABC|DUYសា|DUY|57T2P|EOP|unknown|geo@xyx.com
|| RAVI|OLE|Hi|London|UK|NA|GB|unknown| WELSH@WELSH.COM
Rogério|Davies|Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Balázs| Roque| Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Johny|Peniç| Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Mike|Mane| Hi | USA |US|WLU|US|unknown| USA@WELSH.COM输出:
888|Jobin|Matt|NORMALSQ|YUOZ|IOP|OPO||ID12|doorbell|geo@xyx.comd
1011|ICE|LAND||DUY|DUY|57T2P|EOP|dataset1|geo@xyx.com
53101||GUTTI|RR|Hi|London|UK|WLU|GB|dataset1|
|JOH|LIU|ABC|DUY|DUY|57T2P|EOP|unknown|geo@xyx.com
|JOH|LIU|ABC|DUY|DUY|57T2P|EOP|unknown|geo@xyx.com
|| RAVI|OLE|Hi|London|UK|NA|GB|unknown| WELSH@WELSH.COM
Rogério|Davies|Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Balázs| Roque| Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Johny|Peniç| Hi|USA|US|WLU|US|unknown| USA@WELSH.COM
Mike|Mane| Hi | USA |US|WLU|US|unknown| USA@WELSH.COM发布于 2019-09-30 17:29:17
如果你真的有UTF-8并且只想保留扩展的ascii字符(通常是latin1),iconv可能适合你。
iconv -c -f UTF8 -t LATIN1 input_file > output_file遇到无法转换的字符时,
-c会以静默方式丢弃这些字符,而不是终止这些字符。
发布于 2019-09-30 17:35:33
您可以使用Unicode属性来检测属于拉丁语和基本拉丁语的字符,这些字符似乎是您希望保留的字符。Perl在正则表达式中支持它们:
perl -CSD -pe 's/[^\p{Basic Latin}\p{Latin}]//g' file.txt(但它不会将123更改为57T2P)
-CSD打开输入的UTF8解码/编码,output-p逐行读取输入,并在processings/PATTERN/REPLACEMENT/g全局替换后打印每一行,它用替换替换所有出现的PATTERN,在这种情况下,替换是empty[...]引入一个字符类,开头的^否定它,即我们希望匹配任何不是拉丁语或基本拉丁语的内容。发布于 2019-09-30 18:10:22
以下是对你的问题最不优雅的解决方案:
$ sed -e 's/[^,./@|[:space:]0-9[=a=][=b=][=c=][=d=][=e=][=f=][=g=][=h=][=i=][=j=][=k=][=l=][=m=][=n=][=o=][=p=][=q=][=r=][=s=][=t=][=u=][=v=][=w=][=x=][=y=][=z=][=A=][=B=][=C=][=D=][=E=][=F=][=G=][=H=][=I=][=J=][=K=][=L=][=M=][=N=][=O=][=P=][=Q=][=R=][=S=][=T=][=U=][=V=][=W=][=X=][=Y=][=Z=]]//g' file.txt令我大吃一惊的是,我不能使用[:punct:],因为有些符号实际上被定义为标点符号。
https://stackoverflow.com/questions/58164881
复制相似问题