我有一个具有以下结构的文件:

# #################################################################
#   TEXT: MORE TEXT
#   TEXT: MORE TEXT
# #################################################################

___________________________________________________________________
ITEM 1
___________________________________________________________________
PROPERTY1:     VALUE1_1
PROPERTY222:   VALUE2_1
PROPERTY33:    VALUE3_1
PROPERTY4444:  VALUE4_1
PROPERTY55:    VALUE5_1

Description1:  Some text goes here
Description2:  Some text goes here

___________________________________________________________________
ITEM 2
___________________________________________________________________
PROPERTY1:     VALUE1_2
PROPERTY222:   VALUE2_2
PROPERTY33:    VALUE3_2
PROPERTY4444:  VALUE4_2
PROPERTY55:    VALUE5_2

Description1:  Some text goes here
Description2:  Some text goes here

我想使用sed或awk将另一个项目添加到文件中:
 sed -i -r "\$a$PROPERTY1:     VALUE1_3" file.txt
 sed -i -r "\$a$PROPERTY2222:     VALUE2_3" file.txt

等等。所以我的下一个项目看起来像这样:
___________________________________________________________________
ITEM 3
___________________________________________________________________
PROPERTY1:     VALUE1_3
PROPERTY222:     VALUE2_3
PROPERTY33:     VALUE3_3
PROPERTY4444:     VALUE4_3
PROPERTY55:     VALUE5_3

Description1:  Some text goes here
Description2:  Some text goes here

列值是锯齿状的。如何像以前的项目一样将值向左对齐?我可以在这里看到2个解决方案:
  • 将值插入文件时对齐它们。
  • 以将值插入文件的方式进行下一步对齐。

  • 命令
    sed -i -r "s|.*:.*|&|g" file.txt
    

    捕获我想要对齐的属性和值,但是我无法正确对齐它们,即
    awk '/^.*:.*$/{ printf "%-40s %-70s\n", $1, $2 }' file.txt
    

    它打印出文件,但是包含描述值和标记,如果它们包含空格或破折号,则将其剪切。只是一团糟。

    我已经根据在Stack Overflow和一些博客上找到的内容尝试了更多命令,但是我什么都不需要。

    注意:description标记的值不是锯齿状的-这是因为我以单独的方式将它们写入文件中。

    我的命令出了什么问题?我如何实现我所需要的?

    最佳答案

    如果文件没有标签,请尝试以下操作:

    sed -r 's/: +/:\t/' file.txt | expand -20
    

    在这种情况下,将输出重定向到tmpfile并将tmpfile移到file.txt

    10-06 06:57