首页 > 解决方案 > 使用 sed 重新格式化行,将一个部分复制到单独行上其他部分的开头

问题描述

对于 LS_COLORS 和 ~/.dir_colors 加载过滤器(sed?)而不是"pattern color" "pattern color"... 在 10 行上,我想DEF_COLOR color pattern pattern pattern...在一行上。sed 如何重新格式化一行以便我可以使用

DEF_COLOR 31 .tar .tgz .zip .z .gz .bz .tbz .tbz

并获得实际配置文件格式所需的许多行?像这样...

.tar 31
.tgz 31
.zip 31
.z   31
.gz  31
.bz  31
.tbz 31

标签: awksediterationls-colors

解决方案


我喜欢 sed,但我不喜欢它。(它不能很好地做字段分隔符)

这是一个 perl 版本。

perl -lne '@f=split;print "$_ $f[1]" for @f[2..$#f]'

  • 将行拆分为数组@f
  • 用于-l在每次打印时换行
  • 打印@f从第 3 个到最后的每个项目,然后是第 2 个项目

或者,正如@tshiono 指出的那样,添加-a以自动获取数组:

perl -lane 'print "$_ $F[1]" for @F[2..$#F]'

一般来说perl -pperl -n将 perl 置于类似于sedand的流处理模式sed -n......但有更多可用的工具。


推荐阅读