我有一个具有以下结构的文件:
# #################################################################
# 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 和一些博客上找到的内容,我尝试了更多命令,但没有任何命令能满足我的需要。
注意:描述标签的值不是锯齿状的 - 这是因为我以单独的方式将它们写入文件。
我的命令有什么问题吗?我如何实现我所需要的?
最佳答案
当您的文件没有选项卡时,请尝试以下操作:
sed -r 's/: +/:\t/' file.txt | expand -20
当此操作有效时,将输出重定向到 tmpfile 并将 tmpfile 移动到 file.txt
。
关于linux - sed/awk : Aligning words in a file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864917/