shell - sed命令替换空格和:之间的数字

标签 shell unix awk sed

我有一个包含如下记录的文件

FIRST 1: SECOND 2: THREE 4: FIVE 255: SIX 255

我想删除空格和 : 之间的值

FIRST:SECOND:THREE:FIVE:SIX

带有代码

awk -F '[[:space:]]*,:*' '{$1=$1}1' OFS=, file

最佳答案

尝试过 gnu awk:

awk -F' [0-9]*(: *|$)' -vOFS=':' '{print $1,$2,$3,$4,$5}' file

尝试过 gnu sed:

sed -E 's/\s+[0-9]+(:|$)\s*/\1/g' file

awk的解释,
正则表达式 ,一个空格,后跟 [0-9]+ 一个或多个数字,后跟文字 : 后跟一个或多个空格:*,如果所有这些匹配,则收集除此匹配模式之外的所有其他内容,即。 FIRST、SECOND...等等,因为 -F 选项将其确定为字段分隔符 (FS),而 $1、$2 .. 等等始终不是 FS。但输出需要好看,即。有 FS,所以是 : 并且是 awk 变量定义 -vOFS=':'

关于shell - sed命令替换空格和:之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836130/

相关文章:

linux - 将 curl 与 -d param1=value1 一起使用似乎无法正常工作

java - 错误 : Could not find or load main class Main (unix)

regex - 根据特定列删除重复项

linux - 在 bash 脚本的 until 循环中验证多个表达式

linux - 对于两个连续的选项, `getopts` 将第二个选项作为第一个选项的参数

linux - SED - 删除后跟换行 (\n) 的字符串

c - 意外标记附近的语法错误

awk - 使用 awk 对多个文件中的同一列求和?

shell - 如何使用awk将两个模式之间未知数量的多行合并为一行

if 的 Bash 约定;然后