提取数据的正则表达式/模式匹配问题

提取数据的正则表达式/模式匹配问题

删除以下行中的距离并输出 cdv 格式的最佳方法是什么?这可以在命令行上相当轻松地完成吗?我想避免编写完整的脚本。

Greece 282 km, Macedonia 151 km, Montenegro 172 km, Kosovo 112 km
Central African Republic 797 km, Chad 1,094 km, Republic of the Congo 523

输出将是:

Greece,Macedonia,Montenegro,Kosovo
Central African Republic,Chad,Republic of the Congo

答案1

不知道 cdv 的格式是什么,但似乎您只需要删除后面跟着可选测量单位的数字,然后压缩剩余逗号后面的空格:

sed 's/ *[0-9]\+\(,[0-9]\+\)\?\( *km *\)\?//g;s/, \+/,/g' file.txt

为了更好的可读性,与扩展正则表达式相同(适用于 GNU sed):

sed -r 's/ *[0-9]+(,[0-9]+)?( *km *)?//g;s/, +/,/g' file.txt

答案2

这对我来说有类似的数据集

sed -e 's/[0-9]*.[0-9]*.km//g' -e 's/\,\ /\,/g' <file>

答案3

聚会有点晚了...这里有一种使用 GNU awk + ​​sed 来做到这一点的方法

awk -F'[[:space:]]*[[:digit:],]+[[:space:]]*?km[[:space:],]*' 'BEGIN{OFS=","}{$1=$1;print}' | sed 's/,$//g'

相关内容