使用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
我尝试在 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