Bash-interesting-command-examples: Difference between revisions
Jump to navigation
Jump to search
(Created page with "====Interesting one-liners==== * Find all drives and ignore loop devices <pre> root@kvm03:/var/log# lsblk | grep -v "loop\|NAME" | grep "^[a-z]\|^[A-Z]" | awk '{print $1}' sda...") |
mNo edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 8: | Line 8: | ||
</pre> | </pre> | ||
<pre> | |||
root@kvm03:/var/log# lsblk | grep disk | awk '{print $1}' | |||
sda | |||
sdb | |||
root@kvm03:/var/log# | |||
</pre> | |||
Continue match until match is found | |||
* This is using awk, and seems quite powerful as a tool | |||
* found this little gem at [https://unix.stackexchange.com/questions/21076/how-to-show-lines-after-each-grep-match-until-other-specific-match Stack Exchange] | |||
<pre> | |||
awk '/Word A/,/Word D/' filename | |||
/From/CONTINUE/Until/ | |||
</pre> | |||
* Remove non-english directories | |||
* change the type to f if you are looking for non-english files | |||
* ALWAYS test find results before deleting, duh! | |||
<pre> | |||
sudo find . -type d -not -name "[a-zA-Z0-9]*" -exec rm -rf {} \; | |||
</pre> | |||
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. | |||
<pre> | |||
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) | |||
}' | |||
</pre> | |||
[[Category:Bash]] | [[Category:Bash]] | ||
Latest revision as of 07:21, 28 October 2025
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)
}'