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

b09cbbtk  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(132)

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

zed5wv101#

您可以考虑以下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
dzjeubhm

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

相关问题