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 ""} }