sed - 使用 sed 跳过/删除非 ascii 字符

标签 sed

Chip,Dirkland,DrobæSphere Inc,cdirkland@hotmail.com,usa

我一直在尝试使用 sed 修改 .csv 中的电子邮件地址,但上面的行一直让我困惑,使用如下命令:

sed -i 's/[\d128-\d255]//' FILENAME

from this stackoverflow question

似乎不起作用,因为我收到“无效排序字符”错误。

理想情况下,我根本不想更改组合的 AE 字符,我宁愿 sed 直接跳过它,因为我不想操纵该文本,而是操纵电子邮件地址。只要该 AE 在那里,尽管它会导致我的 sed 替换在一行后失败,删除该字符并且它可以很好地处理整个文件。

有什么想法吗?

最佳答案

这可能对你有用(GNU sed):

echo "Chip,Dirkland,DrobæSphere Inc,cdirkland@hotmail.com,usa" |
sed 's/\o346/a+e/g'
Chip,Dirkland,Droba+eSphere Inc,cdirkland@hotmail.com,usa

然后做你必须做的事情,然后恢复:

echo "Chip,Dirkland,Droba+eSphere Inc,cdirkland@hotmail.com,usa" | 
sed 's/a+e/\o346/g'
Chip,Dirkland,DrobæSphere Inc,cdirkland@hotmail.com,usa

如果您在字符串中包含棘手的字符,并且想要了解 sed 如何看待它们,请使用 l0 命令(请参阅 here )。对于调试困难的正则表达式也非常有用。

echo "Chip,Dirkland,DrobæSphere Inc,cdirkland@hotmail.com,usa" | 
sed -n 'l0'
Chip,Dirkland,Drob\346Sphere Inc,cdirkland@hotmail.com,usa$

关于sed - 使用 sed 跳过/删除非 ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571601/

相关文章:

linux - 如果值重复,如何更改段落中的特定值

linux - sed 命令行

带有 sed 的正则表达式,跨多行搜索

unix - 如何在 Unix Shell 脚本中用 SED 替换同一文件中的行?

linux - 如何在 shell 脚本中进行反向搜索

regex - gawk RS 仅在行首带有 ^

awk - 列出唯一并计算字符串后的第一个数字匹配

xml - 如何使用 sed 或任何其他 Unix 工具替换具有特定键值的 XML 文件中的所有值字段?

linux - 从文件内部删除模式条目

string - 在 AWK 中,如何拆分与 "record"具有相同字符串的连续行?