请参阅下面的更新。对于每个文件:一行一行,一个字符串grep(错误输出)
我试图强制更新一些日文电子邮件文件的代码页。这些文件被标记为UTF-8,但日文文本未正确表示。我需要将标题中的编码从'UTF-8'更改为'shift-jis'。
我已经手动检查过这个作品,但是我想自动化这个过程。 使用两个sed命令:
#sed -i 's/charset="shift-jis"/charset="shift-jis"/g' $VariableForLine
#sed -i 's/?UTF-8?/?shift-jis?/g' $VariableForLine
我beleive我可以做必要的改革。 由于电子邮件的内容,我需要将其限制为仅更改电子邮件的标头。我看到作为标准的格式如下:
From: "=?UTF-8?Q?JapaneseNameEncodedIncorreclty" <[email protected]>
To: "Yoshi Endo"
Subject: =?UTF-8?Q?????????????????=view=?UTF-8?Q????????????????
MIME-Version: 1.0
Date: Wed, 20 Feb 2006 10:30:22 0100
Content-Type: multipart/alternative;boundary="Next_Item:_(A3CB49KFSA19)/1"
This is a multi-part message in MIME format.
--Next_Item:_(A3CB49KFSA19)/1
Content-type: text/plain; charset="UTF-8"
?UTF-8?(example to skip)
Ÿž=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Ÿž
Japanese Content
Ÿž=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-Ÿž
?UTF-8? (example to skip)
ここには、ログインしてください
----------------------------------------------------------------
Mixed content
***************************************************************************
Mixed content
***************************************************************************
--Next_Item:_(A3CB4g7FSA19)/1--
在文件运行在一个循环中两个上面的命令似乎工作,但我需要确保只有文件的标题,只是之后的字符集变量由于其他电子邮件的内容而被更改。
我所取得的伪代码如下:
for each file in directory of type eml
do
read file line by line
if line contains "charset=" replace with ??
break
else
if line contains ?UTF-8?
replace ?UTF-8? with ?shift-jis'
exit
在if语句第一子句进一步的问题是,“字符集=”可能已应用串不编码,它可能是UTF-8或ANSI,因此我需要搜索charset =的第一个实例,然后更改字符串以添加或替换后面的“”中的字符。
我目前具有如下所示的问题(请原谅我的语法很差把握)到目前为止
#!/bin/bash
for file in ./*
do
cat $file | while read myline
do
if $myline |grep "charset="
then
echo $myline
#echo $myline #this prints all the content
fi
done
#sed -i 's/charset="shift-jis"/charset="shift-jis"/g' $LINE
#sed -i 's/?UTF-8?/?shift-jis?/g' $LINE
done #end
感谢您的输入的代码。非常感激。
编辑:我有一个解决方案
for file in `find ./ | grep .EML`
do
sed -i 's/charset=".*"/charset="shift-jis"/' $file
sed -i 's/?UTF-8?/?shift-jis?/' $file
done
它没有考虑到占头,而是提供有在电子邮件中的字符集=代码没有其他情况下,那么它应该没问题。
将'grep'配置为'echo'根本没有任何意义('echo'不会从stdin读取任何内容)。你能告诉我们一些输入和你期望输出的样子吗? – larsks
你可以减少整个事情到'grep“字符集=”*'? –
我对语法不是很熟悉。将grep配置为echo会尝试显示结果正确的字符串。我试图单独使用grep语句无济于事。我会尽快发布我的结果。感谢您帮助球员。 –