例如,我有一个名为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
zed5wv101#
您可以考虑以下sed解决方案:
sed
sed -E 's~.*/([^:]+):.*~\1 &~' file main1 var/lib/repos/main1:v1 2gb main2 var/lib/repos/main2:v2 1gb
分手:
.*
/
([^:]+)
:
\1 &
否则,awk命令也将起作用:
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
dzjeubhm2#
使用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
2条答案
按热度按时间zed5wv101#
您可以考虑以下
sed
解决方案:分手:
.*
:匹配0个或多个任意字符(由于贪婪而导致的最长匹配)/
:匹配/
([^:]+)
:匹配1+非/
的任何字符,并在组#1中捕获:
:匹配:
.*
:匹配0个或多个任意字符(由于贪婪而导致的最长匹配)\1 &
:将第一组的捕获值和空格放在匹配行的前面否则,
awk
命令也将起作用:dzjeubhm2#
使用
awk
: