File: //proc/self/root/usr/local/modsecurity-crs/regex-assembly/include/unix-shell-4andup.ra
##! Please refer to the documentation at
##! https://coreruleset.org/docs/development/regex_assembly/.
##! This list was generated from the original lists with the following command:
##! awk '/^([a-z0-9_-]+)/ { x = $0; gsub(/[@~]/, "", x); if (length(x) > 3) print }' 93210{0,5}.data
##! Note that the suffixes must be added manually to new entries.
##! To regenerate this list from unix-shell.data, run the following:
##! NL=$'\n'
##! original="$(grep -vE '^[#$]' regex-assembly/include/unix-shell-4andup.ra)"
##! source="$(awk '/^[^#$]/ {split($0,x,"/"); y=x[length(x)]} length(y) > 3 {print y}' \
##! rules/unix-{shell,shell-builtins}.data | \
##! sort | uniq)"
##! result=""
##! # retain all unmodified entries in this list and skip removed ones; ignore the manually added suffixes
##! while read -r oword; do
##! # strip suffixes from end of words
##! oword_raw="${oword/%@/}"
##! oword_raw="${oword_raw/%~/}"
##! while read -r sword; do
##! # handle "clang++"
##! sword="${sword//++/\+\+}"
##! # handle "." in commands
##! sword="${sword//./\.}"
##! if [ "${oword_raw}" = "${sword}" ]; then
##! result="${result}${oword}${NL}"
##! break
##! fi
##! done <<<"${source}"
##! done <<<"${original}"
##! # add new entries to this list
##! while read -r sword; do
##! # handle "clang++"
##! sword="${sword/%++/\+\+}"
##! # handle "." in commands
##! sword="${sword//./\.}"
##! found=0
##! while read -r oword; do
##! # strip suffixes from end of words
##! oword_raw="${oword/%@/}"
##! oword_raw="${oword_raw/%~/}"
##! if [ "${oword_raw}" = "${sword}" ]; then
##! found=1
##! break
##! fi
##! done <<<"${original}"
##! if [ ${found} -eq 0 ]; then
##! result="${result}${sword}${NL}"
##! fi
##! done <<<"${source}"
##! # Suffix all English words or words shorter than 5 characters with `@`
##! original="${result}"
##! english="$(util/fp-finder/spell.sh -m -e - <<<"${result}")"
##! result=""
##! while read -r oword; do
##! found=0
##! if [ -n "${oword}" ]; then
##! if [ ${#oword} -lt 5 ]; then
##! found=1
##! else
##! while read -r eword; do
##! if ([ "${oword}" = "${eword}" ]); then
##! result="${result}${oword}@${NL}"
##! found=1
##! break
##! fi
##! done <<<"${english}"
##! fi
##! fi
##! if [ ${found} -eq 0 ]; then
##! result="${result}${oword}${NL}"
##! fi
##! done <<<"${original}"
##! body_start=$(grep -n -E -m 1 '^[^#$]' regex-assembly/include/unix-shell-4andup.ra | cut -d: -f1)
##! ed -s regex-assembly/include/unix-shell-4andup.ra <<EOF
##! $((body_start - 1)),\$d
##! w
##! q
##! EOF
##! echo "${result}" | sort | uniq >> regex-assembly/include/unix-shell-4andup.ra
HEAD@
POST@
addgroup
adduser
agetty
alias@
alpine@
ansible
apt-get
aptitude@
arch@
aria2c
arj-register
arjdisp
ascii-xfr
ascii85
aspell
atobm@
axel@
base32
base64
basename@
basenc
bash@
batch@
blkid@
bpftrace
breaksw
bridge@
bsdcat
bsdiff
bsdtar
builtin
bundler@
bunzip2
busctl
busybox
byebug
byobu@
bzcat@
bzcmp@
bzdiff
bzegrep
bzexe@
bzfgrep
bzgrep
bzip2@
bzip2recover
bzless
bzmore
c89-gcc
c99-gcc
cancel@
capsh@
certbot
chattr@
chdir@
check_by_ssh
check_cups
check_log
check_memory
check_raid
check_ssl_cert
check_statusfile
chef-
chef@
chflags
chgpasswd
chgrp@
chmod@
choom@
chown@
chpass
chroot@
chsh@
clang@
clang\+\+
cobc@
cobcrun
column@
comm@
command@
composer@
compress@
coproc
cowsay
cowthink
cpan@
cpio@
cpulimit
crash@
cron@
crontab
cscli@
csplit
csvtool
cupsfilter
curl@
dash@
date@
dhclient
dialog@
diff@
dmesg@
dmidecode
dmsetup
doas@
docker@
docker-
done@
dosbox
dpkg-
dpkg@
dvips@
e2fsck
easy_install
echo@
efax@
egrep@
emacs@
endif@
endsw@
env-update
esac@
eval@
exec@
exiftool
expand@
expect@
export@
expr@
facter
fdfind@
fdisk@
fdmount
fdumount
fetch@
fgrep@
file@
filetest
find@
finger@
fish@
flock@
fold@
foreach
fping6
fping@
ftpstats
ftpwho
function@
gawk@
gcore@
genie@
genisoimage
getfacl@
ghc-@
ghci-
ghci@
gimp@
ginsh@
grcat@
grep@
group@
groupmod
gtester
gunzip
gzcat@
gzexe@
gzip@
hash@
head@
hexdump
highlight@
history@
hostid
hostname
hping3
htdigest
htop@
htpasswd
iconv@
ifconfig
iftop@
install@
ionice
ip6tables
ipconfig
ippeveprinter
ippfind
ipptool
iptables
ispell
java@
jexec@
jobs@
join@
journalctl
jrunscript
kill@
killall
knife@
ksshell
last@
lastcomm@
lastlog
lastlogin
latex@
ldconfig
less@
lessecho
lessfile
lesspipe
lftp@
lftpget
links@
local@
locate@
loginctl
logname
logsave
look@
losetup
ls-F@
lsb_release
lscpu@
lshw@
lsmod@
lsof@
lspci@
lsusb@
ltrace
lualatex
luatex
lwp-download
lwp-dump
lwp-mirror
lwp-request
lynx@
lz4c@
lz4cat
lzcat@
lzcmp@
lzdiff
lzegrep
lzfgrep
lzgrep
lzless
lzma@
lzmadec
lzmainfo
lzmore
mail@
mailq@
mailx@
make@
master\.passwd
mawk@
mkdir@
mkfifo
mknod@
mktemp
mlocate
more@
mosquitto
mount@
msgattrib
msgcat
msgconv
msgfilter
msgmerge
msguniq
mutt@
mysql@
mysqladmin
mysqldump
mysqldumpslow
mysqlhotcopy
mysqlshow
nano@
nasm@
nawk@
nc\.openbsd
nc\.traditional
ncat@
neofetch
netcat
netkit-ftp
netplan
netstat
nice@
nmap@
node@
nohup@
nping@
nroff@
nsenter
nslookup
nstat@
null@
octave@
onintr
openssl
openvpn
openvt
opkg@
pacman@
parted@
passwd
paste@
patch@
pdb2mb
pdb3@
pdb3\.
pdflatex
pdftex
pdksh@
perf@
perl5@
perl@
perlsh
perms@
pftp@
pgrep@
php-cgi
php5@
php7@
pico@
pidstat
pigz@
ping@
pkexec
pkg_info
pkginfo
pkill@
popd@
printenv
printf@
psed@
psftp
psql@
ptar@
ptardiff
ptargrep
puppet@
pushd@
pwd\.db
py3versions
python2
python3
python~
pyversions
rake@
raku@
rbash@
readelf
reboot@
realpath
redcarpet@
rename@
repeat@
replace@
restic
rlogin
rlwrap
rmdir@
rmuser
rnano@
route@
rpmdb@
rpmquery
rpmverify
rsync-ssl
rsync@
ruby~
run-mailcap
run-parts
rview@
rvim@
sash@
sched@
screen@
script@
sdiff@
sendmail@
service@
setarch
setenv
setfacl@
setsid
sftp@
sh\.distrib
shadow@
shells@
shuf@
shutdown@
sleep@
slsh@
smbclient
snap@
socat@
soelim
sort@
source@
split@
spwd\.db
sqlite3
ssh-keygen
ssh-keyscan
sshpass
start-stop-daemon
stdbuf
stderr
stdin@
stdout
strace
strings@
sudo-rs
sudo@
sudo_
sudoedit
sudoreplay
svnadmin
svnauthz
svnbench
svndumpfilter
svnfsfs
svnlook
svnmucc
svnrdump
svnserve
svnsync
svnversion
sysctl
systemctl
systemd-resolve
tail@
tailf@
task@
taskset
tclsh@
tcpdump
tcping
tcptraceroute
tcsh@
telnet
tftp@
time@
timedatectl
timeout@
tmux@
touch@
traceroute
traceroute6
troff@
tshark
ulimit@
uname@
uncompress@
unexpand
uniq@
unlink@
unlz4@
unlzma
unpigz
unrar@
unset@
unshare@
unxz@
unzip@
unzstd
up2date@
update-alternatives
useradd
userdel
usermod
uudecode
uuencode
valgrind
view@
vigr@
vimdiff
vipw@
virsh@
visudo
visudo-rs
volatility@
wall@
watch@
wget@
whiptail@
whoami
whois@
wireshark
wish@
xargs@
xelatex
xetex@
xmodmap
xmore@
xpad@
xterm@
xzcat@
xzcmp@
xzdec@
xzdiff
xzegrep
xzfgrep
xzgrep
xzless
xzmore
yarn@
yelp@
zathura
zcat@
zcmp@
zdiff@
zegrep
zero@
zfgrep
zgrep@
zipcloak
zipcmp
zipdetails
zipgrep
zipinfo
zipmerge
zipnote
zipsplit
ziptool
zless@
zmodload
zmore@
zrun@
zsoelim
zstd@
zstdcat
zstdgrep
zstdless
zstdmt
zypper