用模式搜索和替换字符串

时间:2018-02-23 08:34:26

标签: bash awk sed

我有一个如下所示的字符串

+             +                  +
| DNS NAME    | IP               |
+             +                  +
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
+             +                  +

我想格式化如下

+-------------+------------------+
| DNS NAME    | IP               |
+-------------+------------------+
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
+-------------+------------------+

所以我正在寻找bash或使用工具(awk / sed)命令,这样我就可以搜索字符串

+             +                  +

并将其替换为

+-------------+------------------+

请注意,固定字符串搜索的列宽可以更长或更短。

2 个答案:

答案 0 :(得分:3)

sed  '/^+/ s/ /-/g' file
+-------------+------------------+
| DNS NAME    | IP               |
+-------------+------------------+
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
+-------------+------------------+

答案 1 :(得分:1)

您还可以使用awk解决方案:

$ awk '/^\+/{gsub(" ","-",$0);}1' file                                                                                                          
+-------------+------------------+
| DNS NAME    | IP               |
+-------------+------------------+
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
| abcdefg.com | 1.2.3.4, 5.6.7.8 |
+-------------+------------------+

awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
Copyright (C) 1989, 1991-2015 Free Software Foundation.

在你用+所有空格开头的行中替换 - 然后打印结果。

相关问题