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