我有一个具有以下结构的文件:
# #################################################################
# 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
。