如何在bash中匹配模式之前追加空格

时间:2014-12-09 10:05:51

标签: regex bash sed

如何在匹配模式之前或在bash中使用sed命令逐行追加空格数?

file.txt的

str_len: equ $ - str    ; calcs length of string (bytes) by
          ; subtracting this address ($ symbol)

output.txt的

str_len: equ $ - str    ; calcs length of string (bytes) by
                        ; subtracting this address ($ symbol)

2 个答案:

答案 0 :(得分:2)

只有一种来自unix-magic-set-of-wondrous-things的工具可以完全满足您的需求:

$ column -t -s ';' -o ';' <input>
str_len: equ $ - str    ; calcs length of string (bytes) by
                        ; subtracting this address ($ symbol)

除此之外,sed是Turing完成的,图灵的机器也是如此。但这并不意味着有时间在这样的体系结构上实现非平凡的解决方案:D

编辑:上面的命令是使用column from util-linux 2.25.2运行的,带有标志:

-o, --output-separator string
   Specify the columns delimiter for table output (default is two spaces).

-s, --separator separators
   Specify the possible input item delimiters (default is whitespace).

-t, --table
   Determine  the  number  of  columns  the input contains and create a table.
   Columns are delimited with whitespace, by default, or with  the  characters
   supplied  using  the --output-separator option.  Table output is useful for
   pretty-printing.

答案 1 :(得分:1)

以下是使用awk的一种方法:

$ awk -F' *;' -vOFS=\; '{print $1 substr("                        ",1,24-length($1)),$2}' file.txt
str_len: equ $ - str    ; calcs length of string (bytes) by
                        ; subtracting this address ($ symbol)

将输入字段分隔符设置为任意数量的空格,后跟分号。将输出字段分隔符设置为分号。打印第一列,然后打印到填充到24个字符所需的空格,然后是第二列。