') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - marcotama/linux-json-based-tools: JSON outputting Linux tools · GitHub
Skip to content

Repository files navigation

This suite of tools is meant to replace some of the Linux most commonly used commands. The advantage is that all of these commands write their output on stdout in JSON format, which allows for easy processing.

The suite contains the following tools:

  • ldc (List Directory Content): replaces ls.
  • lp (List Processes): replaces ps
  • filter: replaces grep
  • tab: prints the JSON input into a readable table format
  • lf: lists the fields in the JSON input
  • sort: sorts JSON lines on given fields: similar to sort

Assuming the aliases in init.sh are setup, the following usages are possible:

$ ldc | lf
access-rights access_rights device ...
$ lp | lf
arg_end arg_start blocked ...
$ ldc | tab name is-file
.git 0
TODO.txt 1
filter.py 1
...
$ ldc | filter 'is-file == 1' | tab name size
TODO.txt 15
filter.py 5353
list_fields.py 712
...
$ ldc | tab name size --headers
name size
.git 4096
TODO.txt 15
filter.py 5789
...
$ lp | filter "real_uid == `id -u`" 'cmdline =~ "^python.+"' | tab pid cmdline
15173 python list_processes.py
15174 python filter.py real_uid == 1000 cmdline =~ "^python.+"
15176 python tab.py pid cmdline
$ ldc | tab `ldc | lf`
755 16877 2053 1 1 0 1000 5 1803287 0 0 0 1 0 0 0 0 1489801354 1489801354 1489801354 0 .git 8 1 1 0 5 . 0 0 4096 0 1 1 1 1000 7
644 33188 2053 0 1 0 1000 4 1720053 0 0 0 0 0 1 0 0 1489796819 1489796775 1489796775 0 TODO.txt 1 0 1 0 4 . 0 0 15 0 0 1 1 1000 6
644 33188 2053 0 1 0 1000 4 1720045 0 0 0 0 0 1 0 0 1489801163 1489801162 1489801162 0 filter.py 1 0 1 0 4 . 0 0 5789 0 0 1 1 1000 6
...
$ ldc | sort access_rights name | tab name access_rights
.git 16877
.idea 16877
.gitignore 33188
README.md 33188
...
$ ldc | sort access_rights "name desc" | tab name access_rights
.idea 16877
.git 16877
test.py 33188
tab.py 33188
...

About

JSON outputting Linux tools

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages