例如,我有一个名为file1的文件,其内容如下
var/lib/repos/main1:v1 2gb
var/lib/repos/main2:v2 1gb
…
所以我希望输出如下
main1 var/lib/repos/main1:v1 2gb
main2 var/lib/repos/main2:v2 1gb
我尝试了以下命令:
cut -d’/‘ -f 4 | cut -d”:” -f1 file1
您可以考虑以下sed
解决方案:
sed -E 's~.*/([^:]+):.*~1 &~' file
main1 var/lib/repos/main1:v1 2gb
main2 var/lib/repos/main2:v2 1gb
分手:
.*
:匹配任意字符的0或更多(由于贪婪导致的最长匹配(/
:匹配/
([^:]+)
:匹配任何非/
的字符的1+并在组#1中捕获:
:匹配:
.*
:匹配任意字符中的0个或多个字符(由于贪婪导致的最长匹配(1 &
:将第一组的捕获值和空格放在匹配行前面
否则这个awk
命令也会起作用:
awk -F: 'n=split($1, a, ///) {print a[n], $0}' file
main1 var/lib/repos/main1:v1 2gb
main2 var/lib/repos/main2:v2 1gb
使用awk
:
awk 'match($0, /main[0-9]/) { print substr( $0, RSTART, RLENGTH ) " " $0}' file1
main1 var/lib/repos/main1:v1 2gb
main2 var/lib/repos/main2:v2 1gb