首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中删除latin1字符

从文件中删除latin1字符
EN

Stack Overflow用户
提问于 2019-09-30 17:19:24
回答 3查看 146关注 0票数 0

我的文件是utf8,但包含几个latin1字符,即其他外语。我的目标是使用Unix命令删除这些字符。早些时候,当我试图通过删除所有非ASCII字符来实现此目的时,下面的命令继续执行并删除了所有重音字符。我想在保留重音字符的同时,只想从文件中删除非英语(普通话、日语、韩语、泰语、阿拉伯语)的术语。

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2019-09-30 17:29:17

如果你真的有UTF-8并且只想保留扩展的ascii字符(通常是latin1),iconv可能适合你。

代码语言:javascript
复制
iconv -c -f UTF8 -t LATIN1 input_file > output_file

遇到无法转换的字符时,

-c会以静默方式丢弃这些字符,而不是终止这些字符。

票数 0
EN

Stack Overflow用户

发布于 2019-09-30 17:35:33

您可以使用Unicode属性来检测属于拉丁语和基本拉丁语的字符,这些字符似乎是您希望保留的字符。Perl在正则表达式中支持它们:

代码语言:javascript
复制
perl -CSD -pe 's/[^\p{Basic Latin}\p{Latin}]//g' file.txt

(但它不会将123更改为57T2P)

  • -CSD打开输入的UTF8解码/编码,output
  • -p逐行读取输入,并在processing
  • s/PATTERN/REPLACEMENT/g全局替换后打印每一行,它用替换替换所有出现的PATTERN,在这种情况下,替换是empty
  • [...]引入一个字符类,开头的^否定它,即我们希望匹配任何不是拉丁语或基本拉丁语的内容。
票数 0
EN

Stack Overflow用户

发布于 2019-09-30 18:10:22

以下是对你的问题最不优雅的解决方案:

代码语言:javascript
复制
$ 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:],因为有些符号实际上被定义为标点符号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58164881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档