【发布时间】:2018-02-02 12:44:45
【问题描述】:
我有一个结构如下的文件:
# #################################################################
# 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
values 列是锯齿状的。如何像以前的项目一样将我的值左对齐?我可以在这里看到 2 个解决方案:
- 在将值插入文件时对齐值。
- 按照我的方式将值插入到文件中,然后对齐它们。
命令
sed -i -r "s|.*:.*|&|g" file.txt
捕获我想要对齐的属性和值,但我无法正确对齐它们,即
awk '/^.*:.*$/{ printf "%-40s %-70s\n", $1, $2 }' file.txt
它打印出文件,但它包含描述值和标签,如果它们包含空格或破折号,则删除这些值。真是一团糟。
根据我在 Stack Overflow 和一些博客上找到的内容,我尝试了更多命令,但没有什么能满足我的需要。
注意:描述标签的值不是锯齿状的——这是因为我以单独的方式将它们写入文件。
我的命令有什么问题?如何实现我的需要?
【问题讨论】:
-
虽然这可以使用 sed/awk 解决,但使用更强大的工具可能更容易解决。您是否考虑过使用具有适当数据结构的成熟编程语言(例如 perl、ruby、c++)来解决您的问题?
-
@Heinrich,我想避免使用成熟的编程语言,因为我在 bash 中有一个几乎完整的脚本,它完全符合我的要求,这是它唯一的问题。由于这个(不那么严重)问题,我不想强迫我的脚本用户安装不同语言的编译器或解释器。
标签: linux bash awk sed text-processing