如何替换特定字段中的数字

如何替换特定字段中的数字

我使用的是 FreeBSD 3.2-RELEASE。例如输出来自last-

abelovsk14 1 10-7 22:06
adamov14 5 10-5 22:53
almasi14 1 10-8 22:56
anda13 53 10-6 22:16
andrejko14 51 10-7 01:28

可以将$4字段替换为这个-

abelovsk14 1 10-07 22:06
adamov14 5 10-05 22:53
almasi14 1 10-08 22:56
anda13 53 10-06 22:16
andrejko14 51 10-07 01:28

$4字段是天数。我想用值替换天数,例如 -101 是否可以使用sed或执行此操作awk

1-01
2-02
3-03
..
9-09
10-10
..
  • info-abelovsk14(用户) 1(夜间登录服务器的次数) 10(月)-7(日) 22:06(昨晚登录)*

答案1

尝试一下:

last | sed 's/^\(.* [0-9][0-9]* \)\([0-9][0-9]\)-\([0-9]\) /\1\2-0\3 /'

解释sed命令很困难,但基本上:

它会在行首查找后面跟有空格的内容,然后匹配一个或多个数字(第二列),然后匹配 MM-d 后面跟有空格的日期。然后它会在一位数的日期前插入一个零,并将它们打印出来。

答案2

请尝试以下操作:

last | sed 's/^\(\s*\S\+\s\+\S\+\s\+[0-9]\+-\)\([0-9]\s.*\)$/\10\2/'

PD:我正在使用 Linux。

答案3

last | sed 's/-\([1-9]\)\>/-0\1/'

它查找以连字符开头、以单词分隔符结尾的 1 到 9 的数字,捕获数字,并用连字符、零、数字替换。

相关内容