对除标题之外的所有内容进行排序

对除标题之外的所有内容进行排序

有时我想对内容进行排序,但不想对标题进行排序。因此,例如,当我在 Apache 中列出加载的模块时,排序中会包含一个 1 行标头:

 $ /usr/local/apache2/bin/apachectl -M | sort

 alias_module (shared)
 asis_module (static)
 cache_disk_module (static)
 cache_module (static)
 core_module (static)
 data_module (static)
 env_module (shared)
 ext_filter_module (static)
 file_cache_module (static)
 filter_module (shared)
 headers_module (shared)
 heartbeat_module (static)
 heartmonitor_module (static)
 http_module (static)
 include_module (static)
 info_module (static)
Loaded Modules:
 log_config_module (shared)
 macro_module (static)
 mime_module (shared)
 mpm_event_module (static)
 ratelimit_module (static)
 reqtimeout_module (shared)
 setenvif_module (shared)
 so_module (static)
 ssl_module (static)
 status_module (shared)
 substitute_module (static)
 unixd_module (static)
 version_module (shared)
 watchdog_module (static)

我尝试使用 -b 选项,但没有效果。无论如何,忽略前导空格只是一种解决方法。我真正想做的是从排序中排除 N 行标题。我怎样才能做到这一点?

答案1

我发现这可以通过使用 head 的数字参数来完成。由于除了头部之外的其余行仍被传递到标准输出,因此 sort 可以接收其余行:

$ /usr/local/apache2/bin/apachectl -M | { head -1; sort; }

将任意多行标题放在 head 后面(此处为 1)。

答案2

sed -n '1p' filename;sed -r "s/\s+//g" l.txt| sed '/^$/d' | sed -n '1!p'  | sort -n

sed -n '1p' filename==>命令将首先显示标题行。

sed -r "s/\s+//g" l.txt| sed '/^$/d' | sed -n '1!p' | sort -n==>它将从第二行打印到文件末尾并对其进行排序。

如果你想从不同的行排序。您只需更改命令中的行号即可。

如有任何疑问,请告诉我。

答案3

您还可以使用tail -n+3从第三行开始,假设空行是输出的第二行。

$ /usr/local/apache2/bin/apachectl -M | tail -n+3 | sort

相关内容