繁体   English   中英

将shell脚本设置为utf8

[英]Setting shell script to utf8

我想将以下命令行写入shell脚本:

cat text.tsv |
grep -Pvi '.\t.\t.*\bHotels|Гостиница|Готель|Отель|Хотел|ホテル|מלון|فندق|होटल|โรงแรม|숙박|호텔|宾馆|旅店|旅馆|酒店|飯店\b' |
awk '{print $0,"\t","column1"} > Text2.tsv

但是当我把它放到.sh文件中时,所有非ascii字符都会被忽略:

cat text.tsv |
grep -Pvi '.\t.\t.*\bHotels|?????????|??????|?????|?????|???|????|????|????|??????|??|??|??|??|??|??|??\b' |
awk '{print $0,"\t","True"} > Text2.tsv

如何将.sh文件设置为UTF-8? 我试过了:

iconv -c -f ASCII -t UTF-8 Test.sh > Test2.sh 

但这似乎不起作用。

Bash会处理您的区域设置。

locale检查它

如果不是UTF-8,你会这样:

export LANG=C.UTF-8

脚本本身应该是UTF-8。 您需要确保您的语言环境和Bash设置已正确设置(真正需要明确配置旧版本的Bash以传递8位数据等;但这应该是古代历史上任何合理的现代问题平台)。 基本上,这应该只是工作。

但是,有很多事情可能是错的。 脚本文件是否正确使用UTF-8? 该文件Test2.sh几乎可以肯定是没有了,你应该已经收到警告iconv如果输入Test.sh正确的格式,所以我们隐约猜测你已经在这个文件中,使用其它的编码,这可以解释为什么事情不工作。

此外,你的Awk脚本似乎在最后错过了一个结束的单引号。

最后,任何看起来像grep | awk grep | awk通常可以更优雅地重构为Awk脚本。 当你在它的时候摆脱无用的cat

awk 'tolower($0) !~ /.\t.\t.*\<(Hotels|Гостиница|Готель|Отель|Хотел|ホテル|מלון|فندق|होटल|โรงแรม|숙박|호텔|宾馆|旅店|旅馆|酒店|飯店)\>/{
print $0,"\t","column1"}' test.tsv > Text2.tsv

我假设你的正则表达式错过了酒店短语周围的一对括号。 awk不识别\\b但是\\< / \\>表示同样的事情。

如果目的是在制表符分隔的文本文件的第三列中查找这些短语,请使用-F '\\t'并直接检查$3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM