Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash/sh脚本中,是否有方法格式化字符串中子字符串的宽度?_Bash_Shell - Fatal编程技术网

在bash/sh脚本中,是否有方法格式化字符串中子字符串的宽度?

在bash/sh脚本中,是否有方法格式化字符串中子字符串的宽度?,bash,shell,Bash,Shell,我必须使用bash脚本格式化字符串中子字符串的宽度,但不使用标记或循环。两个冒号之间的单个字符前面应加0,以匹配每个字段的标准宽度2 例如 发件人: 到 我该怎么做 sed -r 's/\<([0-9a-f])\>/0\1/g' 如果任何字段的长度为=1,则这会将整行分割为由:分隔的字段。然后将该字段替换为0字段 如果任何字段的长度为=1,则这会将整行分割为由:分隔的字段。然后将该字段替换为0字段 Bash解决方案: IFS=:;对于$string中的i;do echo-n0$i:

我必须使用bash脚本格式化字符串中子字符串的宽度,但不使用标记或循环。两个冒号之间的单个字符前面应加0,以匹配每个字段的标准宽度2

例如

发件人:

我该怎么做

sed -r 's/\<([0-9a-f])\>/0\1/g'
如果任何字段的长度为
=
1,则这会将整行分割为由
分隔的字段。然后将该字段替换为
0
字段

如果任何字段的长度为
=
1,则这会将整行分割为由
分隔的字段。然后将该字段替换为
0
字段

Bash解决方案:

IFS=:;对于$string中的i;do echo-n0$i:| tail-c3;完成
Bash解决方案:

IFS=:;对于$string中的i;do echo-n0$i:| tail-c3;完成
带有

您可以向所有令牌添加“0”,并删除不需要的令牌:

sed -r 's/0([0-9a-f]{2})/\1/g' <<< "0${str//:/:0}"

您可以向所有令牌添加“0”,并删除不需要的令牌:

sed -r 's/0([0-9a-f]{2})/\1/g' <<< "0${str//:/:0}"

“没有令牌”是什么意思?如何处理像abc这样的子字符串?没有令牌”是什么意思?如何处理像abc这样的子字符串?
$ sed -r 's/\<([0-9a-f])\>/0\1/g' <<< "6:0:36:35:30:30:72:6c:73:0:c:52:4c:30:31:30:31:30:30:30:31:36:39:0:1:3"
06:00:36:35:30:30:72:6c:73:00:0c:52:4c:30:31:30:31:30:30:30:31:36:39:00:01:03
awk -F: -v OFS=: '{for(i=1;i<=NF;i++) if(length($i)==1)gsub($i,"0&",$i)}1' file
06:00:36:35:30:30:72:6c:73:00:0c:52:4c:30:31:30:31:30:30:30:31:36:39:00:01:03
str="06:00:36:35:30:30:72:6c:73:00:0c:52:4c:30:31:30:31:30:30:30:31:36:39:00:01:03"
sed -r 's/0([0-9a-f]{2})/\1/g' <<< "0${str//:/:0}"
echo $(IFS=:; printf "%2s:" ${str} | tr " " "0")