Bash-interesting-command-examples

From I Will Fear No Evil
Revision as of 08:21, 28 October 2025 by Chubbard (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Interesting one-liners

  • Find all drives and ignore loop devices
root@kvm03:/var/log# lsblk | grep -v "loop\|NAME" | grep "^[a-z]\|^[A-Z]" | awk '{print $1}'
sda
sdb
root@kvm03:/var/log# 
root@kvm03:/var/log# lsblk | grep disk | awk '{print $1}'
sda
sdb
root@kvm03:/var/log# 

Continue match until match is found

  • This is using awk, and seems quite powerful as a tool
  • found this little gem at Stack Exchange
awk '/Word A/,/Word D/' filename

/From/CONTINUE/Until/
  • Remove non-english directories
  • change the type to f if you are looking for non-english files
  • ALWAYS test find results before deleting, duh!
sudo find . -type d -not -name "[a-zA-Z0-9]*" -exec rm -rf {} \;

Who the hell thought it was a good idea to NOT have xml2 available in both Mac and Linux? What the hell!?!?

  • On Mac install gawk via brew
  • will leverage xmllint, and then stupidity ensues... WTF?
  • never trust this in prod-ish servers without a lot of testing. chatGPT gave this suggestion as a workaround to get the xml2 behavior.
  • I am betting that complex xml will make this choke or turn into a pumpkin but meh, it works well enough for simple stuff.
echo '<root><name>Chris</name></root>' | xmllint --format - 2>/dev/null | gawk '
  /<[[:alnum:]_:-]+>/ {
    tag = gensub(/.*<([[:alnum:]_:-]+)>.*/, "\\1", "g")
    path = (path ? path "/" tag : "/" tag)
  }
  /<\/[[:alnum:]_:-]+>/ {
    if ($0 ~ /<[[:alnum:]_:-]+>[^<]+<\/[[:alnum:]_:-]+>/) {
      val = gensub(/.*<[[:alnum:]_:-]+>([^<]+)<\/[[:alnum:]_:-]+>.*/, "\\1", "g")
      print path "=" val
    }
    sub(/\/[^/]+$/, "", path)
  }'