gpt4 book ai didi

regex - 当被数值包围时替换空格,但不被字母字符包围

转载 作者:行者123 更新时间:2023-12-01 07:40:37 26 4
gpt4 key购买 nike

在仅包含字母数字字符的固定宽度文件中,我想替换字母字符和数字字段(包括有符号十进制,但不包括科学记数法)以及数字和数字字段之间的空白字母字符值之间的空格。

我知道使用 awkFIELDWIDTHS 选项,但是我有太多字段和太多独特结构的文件类型无法进行概括。

这是一个玩具示例:

708 447 4797 JOHN SMITH 18000 

需要格式化如下:

708|447|4797|JOHN SMITH|18000 

寻找使用 sedperlawk 等的任何可移植解决方案。

编辑:

为了澄清问题并概括出更好的整体可用性,这里有更多行来测试解决方案。请继续假设任何有空格的字母字符确实应该放在一起(即假设没有出现 Bob Jones Chuck Smith)。

708 447 4797 JOHN SMITH 18000
708 447 4797 JOHN SMITH 18000
708 447 4797 JOHN SMITH 18000
708 -3.00 4797 JOHN SMITH 18000

应该导致:

708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|-3.00|4797|JOHN SMITH|18000

最佳答案

使用sed:

sed -r 's/([^[:alpha:]]) +| +([^[:alpha:]])/\1|\2/g' file
708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|-3.00|4797|JOHN SMITH|18000

编辑:使用 gnu-awk:

awk -v OFS='|' 'BEGIN { 
FPAT="[^[:alpha:] ]+[[:alpha:]]+( +[[:alpha:]]+)*"
} {$1=$1} 1' file
708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|447|4797|JOHN SMITH|18000
708|-3.00|4797|JOHN SMITH|18000

关于regex - 当被数值包围时替换空格,但不被字母字符包围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com