Bash 比赛结束了吗?

Bash 比赛结束了吗?,bash,sed,Bash,Sed,我有一个这样的文件:(不过要长得多) 我如何使用sed制作如下列表: 1: 5.60 2: 6.20 3: 6.58 4: 7.32 5: 8.10 6: 7.70 awk 'NF==2{printf("%s: %s\n", $1, $2);}' file.txt 谢谢 这也适用于多个数字,只要每行上的两个数字之间始终至少有一个空格。为什么不使用awk这样做: 1: 5.60 2: 6.20 3: 6.

我有一个这样的文件:(不过要长得多)

我如何使用
sed
制作如下列表:

     1: 5.60
     2: 6.20
     3: 6.58
     4: 7.32
     5: 8.10
     6: 7.70
awk 'NF==2{printf("%s: %s\n", $1, $2);}' file.txt
谢谢


这也适用于多个数字,只要每行上的两个数字之间始终至少有一个空格。

为什么不使用awk这样做:

     1: 5.60
     2: 6.20
     3: 6.58
     4: 7.32
     5: 8.10
     6: 7.70
awk 'NF==2{printf("%s: %s\n", $1, $2);}' file.txt
输出
另一种sed解决方案是:

sed-E的/^([[0-9]+)/\1:/'您的\u文件

这只是将行首的任何数字串替换为后跟冒号的数字串。

这一个对我来说很有用——基本上\1匹配第一个数字,\2匹配其余数字

sed 's/\( *[0-9]*\)\(.*\)/\1:\2/' file.txt

当它点击
10
100
?糟糕。它基本上没有尾随的0:1、10、99、100,最多127。这似乎不起作用,它只是有与编辑文件相同的输出。编辑:我发现了问题,文件使用了制表符(“\t”)。谢谢。但是你能解释一下“\s”和“\(\”吗我编辑了我的答案,这样无论是使用制表符还是空格,答案都会起作用。
\S
表示任何非空白字符,我添加到正则表达式中的
\S
匹配任何空白字符。
\(\)
将括号之间的内容放入一个组中,可以在替换为
\1
时引用该组(因为它是第一个也是唯一一个组)。太棒了,谢谢解释=)
sed 's/\( *[0-9]*\)\(.*\)/\1:\2/' file.txt