]> git.ipfire.org Git - thirdparty/man-pages.git/commitdiff
scripts/bash_aliases: man_section(): Accept multiple sections
authorAlejandro Colomar <alx.manpages@gmail.com>
Sun, 9 May 2021 21:39:20 +0000 (23:39 +0200)
committerMichael Kerrisk <mtk.manpages@gmail.com>
Sun, 9 May 2021 23:33:10 +0000 (11:33 +1200)
Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
scripts/bash_aliases

index 813c00960cc2534df07535d7644ea4cf7b9babfd..7b1b7da9cae42095a32306fb5967c8d29aff14c6 100644 (file)
@@ -85,26 +85,35 @@ function grep_syscall_def()
 ########################################################################
 #      Linux man-pages
 
-#  man_section()  prints a specific manual page section (DESCRIPTION, SYNOPSIS,
+#  man_section()  prints specific manual page sections (DESCRIPTION, SYNOPSIS,
 # ...) of all manual pages in a directory (or in a single manual page file).
-# Usage example:  .../man-pages$ man_section man2 SYNOPSIS;
+# Usage example:  .../man-pages$ man_section man2 SYNOPSIS 'CONFORMING TO';
 
 function man_section()
 {
        if ! [ -v 2 ]; then
-               >&2 echo "Usage: ${FUNCNAME[0]} <dir> <section>";
+               >&2 echo "Usage: ${FUNCNAME[0]} <dir> <section>...";
                return ${EX_USAGE};
        fi
 
-       find "${1}" -type f \
-       |xargs grep -l "\.SH ${2}" \
+       local page="$1";
+       shift;
+       local sect="$@";
+
+       find "${page}" -type f \
+       |xargs wc -l \
+       |grep -v -e '\b1 ' -e '\btotal\b' \
+       |awk '{ print $2 }' \
        |sort -V \
        |while read -r manpage; do
-               <${manpage} \
-               sed -n \
-                       -e '/^\.TH/,/^\.SH/{/^\.SH/!p}' \
-                       -e "/^\.SH ${2}/p" \
-                       -e "/^\.SH ${2}/,/^\.SH/{/^\.SH/!p}" \
+               cat \
+               <(<${manpage} sed -n '/^\.TH/,/^\.SH/{/^\.SH/!p}') \
+               <(for s in ${sect}; do
+                       <${manpage} \
+                       sed -n \
+                               -e "/^\.SH ${s}/p" \
+                               -e "/^\.SH ${s}/,/^\.SH/{/^\.SH/!p}"; \
+                 done;) \
                |man -P cat -l - 2>/dev/null;
        done;
 }