Linux在同一文件的开头剪切并添加输出



例如,我有一个名为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

相关内容

  • 没有找到相关文章

最新更新