Sort And Deduplicate Rust Script
This is a copy of the script in my grimoire that I use to sort and dedupe lines of text
```cargo
[dependencies]
itertools = "0.13.0"
regex = "1.10.4"
```
use itertools::Itertools;
use regex::Regex;
fn main() {
println!("{}", dedup_and_sort(&data()));
}
fn dedup_and_sort(source: &str) -> String {
let re = Regex::new(r"^\s*$").unwrap();
let mut lines = source
.lines()
.filter_map(|line|
{
if !re.is_match(line) {
Some(line.to_string())
} else {
None
}
}
)
.unique()
.collect::<Vec<String>>();
lines.sort_by(|a, b| {
a.to_lowercase().partial_cmp(
&b.to_lowercase()
).unwrap()
});
lines.join("\n")
}
fn data() -> String {
r#"
accesskey
autofocus
class
contenteditable
dir
draggable
enterkeyhint
exportparts
hidden
id
inert
inputmode
is
itemid
itemprop
itemref
itemscope
itemtype
lang
nonce
part
popover
role
slot
spellcheck
style
tabindex
title
translate
virtualkeyboardpolicy
onabort
onautocomplete
onautocompleteerror
onblur
oncancel
oncanplay
oncanplaythrough
onchange
onclick
onclose
oncontextmenu
oncuechange
ondblclick
ondrag
ondragend
ondragenter
ondragleave
ondragover
ondragstart
ondrop
ondurationchange
onemptied
onended
onerror
onfocus
oninput
oninvalid
onkeydown
onkeypress
onkeyup
onload
onloadeddata
onloadedmetadata
onloadstart
onmousedown
onmouseenter
onmouseleave
onmousemove
onmouseout
onmouseover
onmouseup
onmousewheel
onpause
onplay
onplaying
onprogress
onratechange
onreset
onresize
onscroll
onseeked
onseeking
onselect
onshow
onsort
onstalled
onsubmit
onsuspend
ontimeupdate
ontoggle
onvolumechange
onwaiting
accept
autocomplete
capture
crossorigin
dirname
disabled
elementtiming
for
max
maxlength
min
minlength
multiple
pattern
placeholder
readonly
rel
required
size
step
attributionsrc
download
href
hreflang
ping
referrerpolicy
rel
target
type
alt
coords
shape
autoplay
controls
controlslist
crossorigin
disableremoteplayback
loop
muted
preload
src
cite
onafterprint
onbeforeprint
onbeforeunload
onblur
onerror
onfocus
onhashchange
onlanguagechange
onload
onmessage
onoffline
ononline
onpopstate
onresize
onstorage
onunload
vlink
autofocus
disabled
form
formaction
formenctype
formmethod
formnovalidate
formtarget
name
popovertarget
popovertargetaction
type
value
width
height
span
open
name
type
src
datetime
accept-charset
autocapitalize
autocomplete
name
rel
xmlns
allow
allowfullscreen
height
loading
name
referrerpolicy
sandbox
src
srcdoc
width
alt
crossorigin
decoding
elementtiming
fetchpriority
height
ismap
loading
referrerpolicy
sizes
src
srcset
width
usemap
accept
alt
autocapitalize
autocomplete
capture
checked
dirname
disabled
form
formaction
formenctype
formmethod
formnovalidate
formtarget
height
list
max
maxlength
min
minlength
multiple
name
pattern
placeholder
popovertarget
popovertargetaction
readonly
required
size
src
step
type
value
width
for
value
as
name
charset
content
http-equiv
crossorigin
disabled
fetchpriority
href
hreflang
imagesizes
imagesrcset
integrity
media
referrerpolicy
rel
sizes
title
type
min
max
low
high
optimum
form
data
reversed
label
selected
value
start
type
async
crossorigin
defer
fetchpriority
integrity
nomodule
nonce
referrerpolicy
src
type
autocomplete
autofocus
disabled
form
multiple
name
required
size
type
src
srcset
sizes
media
height
width
colspan
headers
rowspan
shadowrootmode
shadowrootclonable
shadowrootdelegatesfocus
autocapitalize
autocomplete
autofocus
cols
dirname
disabled
form
maxlength
minlength
name
placeholder
readonly
required
rows
spellcheck
wrap
abbr
colspan
headers
rowspan
scope
datetime
default
kind
label
src
srclang
autoplay
controls
controlslist
crossorigin
disablepictureinpicture
disableremoteplayback
height
loop
muted
playsinline
poster
preload
src
width
"#.to_string()
}
abbr
accept
accept-charset
accesskey
allow
allowfullscreen
alt
as
async
attributionsrc
autocapitalize
autocomplete
autofocus
autoplay
capture
charset
checked
cite
class
cols
colspan
content
contenteditable
controls
controlslist
coords
crossorigin
data
datetime
decoding
default
defer
dir
dirname
disabled
disablepictureinpicture
disableremoteplayback
download
draggable
elementtiming
enterkeyhint
exportparts
fetchpriority
for
form
formaction
formenctype
formmethod
formnovalidate
formtarget
headers
height
hidden
high
href
hreflang
http-equiv
id
imagesizes
imagesrcset
inert
inputmode
integrity
is
ismap
itemid
itemprop
itemref
itemscope
itemtype
kind
label
lang
list
loading
loop
low
max
maxlength
media
min
minlength
multiple
muted
name
nomodule
nonce
onabort
onafterprint
onautocomplete
onautocompleteerror
onbeforeprint
onbeforeunload
onblur
oncancel
oncanplay
oncanplaythrough
onchange
onclick
onclose
oncontextmenu
oncuechange
ondblclick
ondrag
ondragend
ondragenter
ondragleave
ondragover
ondragstart
ondrop
ondurationchange
onemptied
onended
onerror
onfocus
onhashchange
oninput
oninvalid
onkeydown
onkeypress
onkeyup
onlanguagechange
onload
onloadeddata
onloadedmetadata
onloadstart
onmessage
onmousedown
onmouseenter
onmouseleave
onmousemove
onmouseout
onmouseover
onmouseup
onmousewheel
onoffline
ononline
onpause
onplay
onplaying
onpopstate
onprogress
onratechange
onreset
onresize
onscroll
onseeked
onseeking
onselect
onshow
onsort
onstalled
onstorage
onsubmit
onsuspend
ontimeupdate
ontoggle
onunload
onvolumechange
onwaiting
open
optimum
part
pattern
ping
placeholder
playsinline
popover
popovertarget
popovertargetaction
poster
preload
readonly
referrerpolicy
rel
required
reversed
role
rows
rowspan
sandbox
scope
selected
shadowrootclonable
shadowrootdelegatesfocus
shadowrootmode
shape
size
sizes
slot
span
spellcheck
src
srcdoc
srclang
srcset
start
step
style
tabindex
target
title
translate
type
usemap
value
virtualkeyboardpolicy
vlink
width
wrap
xmlns