日期:2014-05-16  浏览次数:20629 次

高分求一个shell
一个RedHat5.4的linux服务器,某个目录下有很多txt文件,文件名不同,内容都是如下格式的数据:
"123","abc",""," ","xyz","张三","李四"
但是在文件中有一些异常数据,大致是由于全角字符被截取一半后将分割符吃掉,形成如下数据:
"123","abc",""," ","xyz","张三?,"李四"

本人想寻求一个批量替换的shell,将所有文件中?,的字符替换为"。
另外,已经尝试过多次,虽然都是显示为 ?,但可能是不同的字符,因此无法完全用?,匹配,不知道能用正则表达式查找,查找前面没有 " 号的 , 号,将其替换为",字符串,求高手赐教。

------解决方案--------------------
"大致是由于全角字符被截取一半后将分割符吃掉"

看你的例子,分隔符是逗号吧,没看到被吃掉啊
------解决方案--------------------
你可以用“cat -A 文件名”来看看能不能看到那些异常字符的“真身”。
------解决方案--------------------
简化一下,假定文件中原本应该是:"张三丰","李四"
删除“丰”字的一半之后,变成了"张三?,"李四"

那执行下面的命令应该可以变成"张三","李四"
LANG=C sed -e "s/\"\(....\).\",/\"\1\",/" file
------解决方案--------------------
通常汉字都是两个字节组成

LANG=C sed -e "s/\"\(....\).\",/\"\1\",/" file 
这个例子中处理由5个字节组成的不完整的汉字,删除最后一个不完整的汉字,只保留前面两个完整的汉字