删除以下行中的距离并输出 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'