使用sed删除文本文件中的编号

delete numbering in a textfile using sed

我尝试在 raspberry pi 上使用 sed 删除文本文件中的编号。

文本文件:

0 100
1 125
2 160
3 200
4 250
5 320
6 400
7 500
8 640
9 800
10 1000
11 1250
12 1600

sed 后的输出:

100
125
160
200
250
320
400
500
640
800
1000
1250
1600

sed -i 's/^.{,2}//' - 仅删除前 2 个数字,但当您的数字超过 10 个时,它将不起作用。

有没有办法删除第一个值直到 space?

这将删除前导数字,同时保留 没有 前导数字的行:

$ sed 's/^[[:digit:]]\{1,\}[[:blank:]]*//' textfile 
100
125
160
200
250
320
400
500
640
800
1000
1250
1600

工作原理

在 sed 中,替换命令的格式为 s/old/new/,其中 old 是正则表达式。在我们的例子中,我们希望替换为空,因此 new 字段为空。

我们想从匹配行首的数字开始:^[[:digit:]]\{1,\}^ 表示行首。 [[:digit:]]\{1,\} 匹配一个或多个任意数字。

我们还想去掉数字后面的space。 [[:blank:]]* 匹配零个或多个空格或制表符的任意组合。

在过去,我们可能使用 [0-9] 来表示数字。使用现代 unicode 字体,这不再安全。 [:digit:]] 将匹配 unicode 字体中的所有数字,并且仅匹配数字。

awk 来拯救!

awk '{print }'

只会打印第二个字段。你可以用 cut

达到同样的效果
cut -d" " -f2