我正在处理一些已转录为txt文件的人口普查数据。但是,字段由空格分隔,而不是逗号或制表符。以下是典型行中的几个字段,这有助于说明我的问题:
18A 1 239 18A Coffey Street 165 125 331 McLocklan Donald New York
某些字段由多个空格分隔,但有些字段仅由一个空格分隔。但是,某些字段中有多个单词(例如:纽约),也用一个空格分隔。
我想我知道如何通过区分小写字母和大写字母之间的单个空格与两个大写字母之间的单个空格来实现此目的。我仍然是正则表达式的新手,但我不知道如何做到这一点。任何人都可以告诉我如何表达希望替换以小写字母结尾的单词/字符组和以带有下划线的大写字母开头的单词/字符组之间的单个空格?
我认为这可以让我将像Coffey_Street和New_York这样的东西分组,而不用连接像18A_Coffey这样的字段。任何建议或建议都是最受欢迎的。谢谢!
-Connor
答案 0 :(得分:1)
我会问无论是谁送你文件,再用更好的分隔符发送它。在小写和大写字母之间添加下划线在所有情况下都不起作用。
也就是说,您可以使用此命令完成它。
sed -r 's/([a-z]) ([A-Z])/\1_\2/g' file
解释
([a-z]) - match a lowercase character and group it
([A-Z]) - match an uppercase character and group it
the space in between - matches a space character
当sed
找到与该模式匹配时,它会像这样替换它
\1 - puts back the lowercase character
_ - puts an _ where the space was
\2 - puts back the uppercase character