norem for Linux/*BSD
A small utility written in Bourne shell (compatible with both sh and bash, which means works without changes on all *BSD/Linux) that strips comments from a source file. E.g. I am too lazy to scroll through /etc/ssh/sshd_config file to look for any valid directives.
Here is /etc/ssh/sshd_config on FreeBSD.
# $OpenBSD: sshd_config,v 1.98 2016/02/17 05:29:04 djm Exp $ # $FreeBSD: releng/10.3/crypto/openssh/sshd_config 296853 2016-03-14 13:05:13Z des $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. # Note that some of FreeBSD's defaults differ from OpenBSD's, and # FreeBSD has a few additional options. #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: # The default requires explicit activation of protocol 1 #Protocol 2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 1024 # Ciphers and keying #RekeyLimit default none # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH #LogLevel INFO # Authentication: #LoginGraceTime 2m #PermitRootLogin no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #RSAAuthentication yes #PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # Change to yes to enable built-in password authentication. #PasswordAuthentication no #PermitEmptyPasswords no # Change to no to disable PAM authentication #ChallengeResponseAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes # Set this to 'no' to disable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. #UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation sandbox #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum FreeBSD-20160310 # no default banner path #Banner none # override default of no subsystems Subsystem sftp /usr/libexec/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
With this utility, I can just do:
norem -f /etc/ssh/sshd_config
… and voila…You have the meat without the bones.
Subsystem sftp /usr/libexec/sftp-server
Almost all *nix utilities have “#” as a comment, but some languages such as Java and C++ use “//” for comments. In this case, we have to run:
norem -f file -c "/"
The utility is not smart enough for multi-line comments such as “/*…*/”
Here is the source:
#!/bin/sh
usage()
{
echo "usage: norem [-f file ] | [-c char] | [-e]] | [-h]]"
echo "Prints a file skipping the lines that start with -c"
echo "By default empty lines are not printed, use -e yes to include them"
echo "Kliment Andreev - 2016"
}
if [ "$#" == "0" ]; then
usage
exit 1
fi
while [ $# -gt 0 ]; do
key="$1"
case $key in
-f|--file)
FILENAME="$2"
shift
;;
-c|--char)
CHARACTER="$2"
shift
;;
-e|--empty)
EMPTY="$2"
shift
;;
*)
usage
exit
;;
esac
shift
done
if [ -z "${CHARACTER}" ]; then
CHARACTER="#"
fi
if [ -z "${EMPTY}" ]; then
cat ${FILENAME} | sed "/^\\${CHARACTER}/d" | awk /./
else
cat ${FILENAME} |sed "/^\\${CHARACTER}/d"
fi
norem for PowerShell
The same utility for PowerShell. The input parameters are the same.
Param(
[string]$fileName,
[string]$char="#",
[string]$empty
)
function usage {
Write-Host "usage: norem [-f file ] | [-c char] | [-e]]"
Write-Host "Prints a file skipping the lines that start with -c"
Write-Host "By default empty lines are not printed, use -e yes to include them"
Write-Host "Kliment Andreev - 2016"
}
if ($psboundparameters.Count -eq 0) {
usage
exit
}
if ($empty.ToUpper().Contains("Y")) {
Get-Content $fileName | Where { $_ -notmatch "^" + $char }
}
else {
Get-Content $fileName | Where { $_ -notmatch "^" + $char } | Where {$_.trim() -ne ""}
}

