有时我想对内容进行排序,但不想对标题进行排序。因此,例如,当我在 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