用于查找包含特定格式的字符串的Linux脚本&;操纵数据
我需要创建一个linux脚本来搜索文件中如下格式的行: 文本:文本:文本:文本:编号:编号 所以6个文本/数字字符串除以5个分号 例如:用于查找包含特定格式的字符串的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
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..绝对令人惊讶,非常感谢您的时间和解释,一眼看上去效果很好。接下来的几个小时,我将试图准确地理解正在发生的事情。绝对令人惊讶,非常感谢您的时间和解释,一眼就可以看出这似乎是完美的。现在,我将花接下来的几个小时来尝试准确地理解正在发生的事情。工作也完美无缺,感谢您的时间和演示是课堂,非常有助于理解正在发生的事情。工作也完美无缺,感谢您的时间和演示是课堂,非常有助于理解正在发生的事情