有很多 SE 帖子涉及用一个空格替换多个空格,但似乎没有关于用多个空格替换一个空格的帖子。
输入数据:
$ head -n20 $X | paste -sd' \n'
full backup: 20250320-203112F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250320-210501F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250321-070502F repo1: backup set size: 7.7MB, backup size: 7.7MB
incr backup: 20250321-070502F_20250321-100001I repo1: backup set size: 8.5MB, backup size: 2.8MB
incr backup: 20250321-070502F_20250321-104502I repo1: backup set size: 43.5MB, backup size: 38MB
incr backup: 20250321-070502F_20250321-104801I repo1: backup set size: 43.5MB, backup size: 465B
incr backup: 20250321-070502F_20250322-070502I repo1: backup set size: 155.8MB, backup size: 150MB
full backup: 20250323-070501F repo1: backup set size: 283.8MB, backup size: 283.8MB
incr backup: 20250323-070501F_20250324-070501I repo1: backup set size: 411.9MB, backup size: 406.1MB
incr backup: 20250323-070501F_20250325-070502I repo1: backup set size: 541.5MB, backup size: 535.8MB
将八个空格硬编码到sed
工作中,但很难一眼看出添加了多少个空格:
$ head -n20 $X | paste -sd' \n' | sed -e 's/F /F /'
full backup: 20250320-203112F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250320-210501F repo1: backup set size: 4.4MB, backup size: 4.4MB
full backup: 20250321-070502F repo1: backup set size: 7.7MB, backup size: 7.7MB
incr backup: 20250321-070502F_20250321-100001I repo1: backup set size: 8.5MB, backup size: 2.8MB
incr backup: 20250321-070502F_20250321-104502I repo1: backup set size: 43.5MB, backup size: 38MB
incr backup: 20250321-070502F_20250321-104801I repo1: backup set size: 43.5MB, backup size: 465B
incr backup: 20250321-070502F_20250322-070502I repo1: backup set size: 155.8MB, backup size: 150MB
full backup: 20250323-070501F repo1: backup set size: 283.8MB, backup size: 283.8MB
incr backup: 20250323-070501F_20250324-070501I repo1: backup set size: 411.9MB, backup size: 406.1MB
incr backup: 20250323-070501F_20250325-070502I repo1: backup set size: 541.5MB, backup size: 535.8MB
类似的东西sed -e 's/F /F \{8,\}/'
就是我所寻找的。
等一切搞定之后,我再处理incr backup
线路。欢迎提供XY问题解决方案。
column -t
既然XY问题的解决方案很受欢迎……我想情况可能如此。
我理解您希望输出易于阅读且在 中对齐
column
,所以我们将所有内容都传输到column -t
。输入示例的输出
注意:每种方法都有优点和缺点。
您有两个选择:要么截断字符串(如果您使用该字段来标识某些内容,则会产生问题);要么移动后续字段的开头(如果您从您认为固定且所有行都相同的位置截断子字符串,则会产生问题)。
paste
多个文件,column -t
如果某行与其他行的字段数不同,或者某文件的行数不同(也存在sed
和printf
替换),则可能会出现对齐问题。column -t
,如果您有一行包含较长字段,您可以通过添加许多不必要的空白字符来加宽所有行的列(但我相信这是所需的行为,无论病理情况如何)。column -t
您必须特别小心地处理包含空格和不同长度单词的字段,但这似乎不是您的情况。从
man column
您可以尝试使用
awk
并格式化print
(printf
):我得到如下输出:
当然,你可以调整位置的值并添加其余字段
PS 最终
awk
脚本将会是这样的:再次强调:你可以通过修改值来调整位置
%NNs
。示例输出:它应该适用于
sed
:这将用 8 个空格替换 1 个空格。
简单的 Perl 单行代码
这使用 Perl REPL 模式,与
s///g
相同sed
,但e
选项意味着将替换部分作为表达式进行评估。" " x 8
将复制字符串 8 次,并将 (.
运算符) 与F
Python 单行代码、列表推导和所有...
IE