RRR*_*CCC 3 command-line text-processing
bl:ab:la:bl:ab:la
我想以格式 >>编辑 MAC 列表blab.labl.abla
。每个 MAC 都排成一行。我是 AWK 或 SED 的新手,但我几乎确信可以使用这些命令中的任何一个来执行它。
有没有办法设置必须插入字符(点)的列位置(使用 sed 或 awk)才能完成此任务?
我已经阅读了 sed 手册页,但没有得到任何明确的说明。
和awk
:
awk -F: '{print $1$2"."$3$4"."$5$6}'
Run Code Online (Sandbox Code Playgroud)
-F:
将设置:
为字段分隔符,并将print $1$2"."$3$4"."$5$6
打印字段$1
,$2
然后打印 a.
等等......其余的内容是不言自明的。
例子:
$ echo "bl:ab:la:bl:ab:la" | awk -F: '{print $1$2"."$3$4"."$5$6}'
blab.labl.abla
Run Code Online (Sandbox Code Playgroud)
它还可以从文件中读取,如下所示:
awk -F: '{print $1$2"."$3$4"."$5$6}' file
Run Code Online (Sandbox Code Playgroud)
并就地修改文件(即编辑原始文件),如下所示:
gawk -i inplace -F: '{print $1$2"."$3$4"."$5$6}' file
Run Code Online (Sandbox Code Playgroud)
如果您的输入是实际的 MAC 地址,那么 perl 有一个Net::MAC模块(在 Ubuntu 中通过软件包提供libnet-mac-perl
):
前任。
$ echo '01:23:45:67:89:AB' | perl -MNet::MAC -lne '
my $m = Net::MAC->new("bit_group" => 8, "delimiter" => ":", "mac" => $_);
print $m->convert("bit_group" => 16, "delimiter", ".")
'
0123.4567.89ab
Run Code Online (Sandbox Code Playgroud)
对于任意 ASCII 文本,您可以解压分隔对,然后将它们对重新字符串连接起来:
$ echo 'bl:ab:la:bl:ab:la' | perl -MList::Util=pairmap -nE '
say join ".", pairmap { $a . $b } unpack("(A2x)*",$_)
'
blab.labl.abla
Run Code Online (Sandbox Code Playgroud)