Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
用于查找包含特定格式的字符串的Linux脚本&;操纵数据_Linux_Bash - Fatal编程技术网

用于查找包含特定格式的字符串的Linux脚本&;操纵数据

用于查找包含特定格式的字符串的Linux脚本&;操纵数据,linux,bash,Linux,Bash,我需要创建一个linux脚本来搜索文件中如下格式的行: 文本:文本:文本:文本:编号:编号 所以6个文本/数字字符串除以5个分号 例如: 2f0d:011a0000:07f8:0002:1:0 2f0d:07f8:0002:011a0000 2F0D_7F8_2_11A0000 我想把分号当作列分隔符 e、 g 然后我想重新排列数据,如下所示: Column1:Column3:Column4:Column2 discarding column5 & column6 例如: 2f0

我需要创建一个linux脚本来搜索文件中如下格式的行:

文本:文本:文本:文本:编号:编号

所以6个文本/数字字符串除以5个分号

例如:

2f0d:011a0000:07f8:0002:1:0
2f0d:07f8:0002:011a0000
2F0D_7F8_2_11A0000
我想把分号当作列分隔符

e、 g

然后我想重新排列数据,如下所示:

Column1:Column3:Column4:Column2 discarding column5 & column6
例如:

2f0d:011a0000:07f8:0002:1:0
2f0d:07f8:0002:011a0000
2F0D_7F8_2_11A0000
然后我想用下划线替换分号,删除每列的前导零并转换为大写

例如:

2f0d:011a0000:07f8:0002:1:0
2f0d:07f8:0002:011a0000
2F0D_7F8_2_11A0000
最终结果

在file1中,这样的条目

2f0d:011a0000:07f8:0002:1:0
E4+1
p:BSkyB,C:0000
将转换为:

2F0D_7F8_2_11A0000                    
E4+1
p:BSkyB,C:0000
还请注意,在使用sed的解决方案中,文件1中这3行条目中有100行(如果不是1000行):

kent$  awk -F: -v OFS="_" 'NF==6{for(i=1;i<=4;i++){sub(/^0*/,"",$i);$i=toupper($i)};print $1,$3,$4,$2;next}7' file  
2F0D_7F8_2_11A0000
E4+1
p:BSkyB,C:0000
 sed -r 's/^0*([a-f0-9]+):0*([a-f0-9]+):0*([a-f0-9]+):0*([a-f0-9]+):[a-f0-9]+:[a-f0-9]+$/\1_\3_\4_\2/'
请参见使用sed的解决方案:

 sed -r 's/^0*([a-f0-9]+):0*([a-f0-9]+):0*([a-f0-9]+):0*([a-f0-9]+):[a-f0-9]+:[a-f0-9]+$/\1_\3_\4_\2/'
请参见带有sed的:

sed -r 's/^0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:digit:]]+):0*([[:digit:]]+)$/\U\1_\3_\4_\2/' foo
对于sed:

sed -r 's/^0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:alnum:]]+):0*([[:digit:]]+):0*([[:digit:]]+)$/\U\1_\3_\4_\2/' foo

有趣-你能分享你已经尝试过的吗?我尝试过创建一个perl脚本来识别字符串,但没有成功,错误得无法发布,sry..有趣-你能分享你已经尝试过的吗?我尝试过创建一个perl脚本来识别字符串,但没有成功,错误得无法发布,sry..绝对令人惊讶,非常感谢您的时间和解释,一眼看上去效果很好。接下来的几个小时,我将试图准确地理解正在发生的事情。绝对令人惊讶,非常感谢您的时间和解释,一眼就可以看出这似乎是完美的。现在,我将花接下来的几个小时来尝试准确地理解正在发生的事情。工作也完美无缺,感谢您的时间和演示是课堂,非常有助于理解正在发生的事情。工作也完美无缺,感谢您的时间和演示是课堂,非常有助于理解正在发生的事情