142
Useless Use of * Slide 1 Useless Use of * Jan Schaumann [email protected] PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan Schaumann SCALE5x

Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann [email protected] PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 1

Useless Use of *

Jan [email protected]

PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C

Jan Schaumann SCALE5x

Page 2: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 2

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$

Jan Schaumann SCALE5x

Page 3: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 3

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

Jan Schaumann SCALE5x

Page 4: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 4

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

Jan Schaumann SCALE5x

Page 5: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 5

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

Jan Schaumann SCALE5x

Page 6: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 6

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

Jan Schaumann SCALE5x

Page 7: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 7

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

Jan Schaumann SCALE5x

Page 8: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 8

whoami

$ ME=$(id -un)

$ grep ${ME} /etc/passwd | cut -d: -f5

Jan Schaumann

$ groups ${ME}

netbsd sa yahoo

$

http://pipes.yahoo.com

Jan Schaumann SCALE5x

Page 9: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 9

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 10: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 10

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 11: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 11

Useless Use of... what?

Back in the day...

The Operator

Jan Schaumann SCALE5x

Page 12: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 12

Useless Use of... what?

Back in the day...

BOFH

Jan Schaumann SCALE5x

Page 13: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 13

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 14: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 14

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 15: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 15

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 16: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 16

Useless Use of... what?

Back in the day...

Jan Schaumann SCALE5x

Page 17: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 17

Useless Use of... what?

comp.unix.shell

Jan Schaumann SCALE5x

Page 18: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 18

Useless Use of... what?

I have a bunch of text files that contain strings

containing /u. I no longer want them to contain

/u ex: /u/appl/ should be /appl/....

Should I use awk? sed? Help!

Jan Schaumann SCALE5x

Page 19: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 19

Useless Use of... what?

> I have a bunch of text files that contain strings

> containing /u. I no longer want them to contain

> /u ex: /u/appl/ should be /appl/....

>

> Should I use awk? sed? Help!

cat file | sed -e "s!/u/!/!"

Jan Schaumann SCALE5x

Page 20: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 20

Useless Use of Cat

Jan Schaumann SCALE5x

Page 21: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 21

Useful Use of Cat (?)

The obvious:cat file | grep pattern

cat file | awk ’{ print $2; }’

Jan Schaumann SCALE5x

Page 22: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 22

Useless Use of Cat

The obvious:cat file | grep pattern

cat file | awk ’{ print $2; }’

Jan Schaumann SCALE5x

Page 23: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 23

Useless Use of Cat

The obvious:cat file | grep pattern

grep pattern file

cat file | awk ’{ print $2; }’

awk ’{ print $2; }’ < file

Jan Schaumann SCALE5x

Page 24: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 24

Useful Use of Cat (?)

cat file1 file2 file3 | wc -l

cat file1 file2 file3 | wc -w

Jan Schaumann SCALE5x

Page 25: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 25

Useless Use of Cat

cat file1 file2 file3 | wc -l

cat file1 file2 file3 | wc -w

Jan Schaumann SCALE5x

Page 26: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 26

Useless Use of Cat

cat file1 file2 file3 | wc -l

awk ’END { print NR }’ file1 file2 file3

cat file1 file2 file3 | wc -w

awk ’{w = w + NF} END { print w }’ file1 file2 file3

Jan Schaumann SCALE5x

Page 27: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 27

Useful Use of Cat (?)

cat file1 file2 file3 | grep pattern

if [ $(cat files | grep -c pattern) -gt 0 ]; then

Jan Schaumann SCALE5x

Page 28: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 28

Useless Use of Cat

cat file1 file2 file3 | grep pattern

if [ $(cat files | grep -c pattern) -gt 0 ]; then

Jan Schaumann SCALE5x

Page 29: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 29

Useless Use of Cat

cat file1 file2 file3 | grep pattern

grep -h pattern file1 file2 file3

if [ $(cat files | grep -c pattern) -gt 0 ]; then

Jan Schaumann SCALE5x

Page 30: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 30

Useless Use of Cat

cat file1 file2 file3 | grep pattern

grep -h pattern file1 file2 file3

awk ’/pattern/ { print }’ file1 file2 file3

if [ $(cat files | grep -c pattern) -gt 0 ]; then

Jan Schaumann SCALE5x

Page 31: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 31

Useless Use of Cat

cat file1 file2 file3 | grep pattern

grep -h pattern file1 file2 file3

awk ’/pattern/ { print }’ file1 file2 file3

if [ $(cat files | grep -c pattern) -gt 0 ]; then

if [ -n ”$(grep -l pattern files)” ]; then

Jan Schaumann SCALE5x

Page 32: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 32

Useless Use of Cat

cat file1 file2 file3 | grep pattern

grep -h pattern file1 file2 file3

awk ’/pattern/ { print }’ file1 file2 file3

if [ $(cat files | grep -c pattern) -gt 0 ]; then

if [ -n "$(grep -l pattern files)" ]; then

if grep pattern files >/dev/null 2>&1; then

Jan Schaumann SCALE5x

Page 33: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 33

Useful Use of Cat

concatenate and print files

Jan Schaumann SCALE5x

Page 34: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 34

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

Jan Schaumann SCALE5x

Page 35: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 35

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

feed file as input to another command in a particular order

Jan Schaumann SCALE5x

Page 36: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 36

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

feed file as input to another command in a particular order

{ echo $VAR1; cat file; cmd1; } | command

Jan Schaumann SCALE5x

Page 37: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 37

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

feed file as input to another command in a particular order

{ echo $VAR1; cat file; cmd1; } | command

use as a NOOP

Jan Schaumann SCALE5x

Page 38: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 38

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

feed file as input to another command in a particular order

{ echo $VAR1; cat file; cmd1; } | command

use as a NOOP

if condition; then

cmd1 | cmd2 | cmd3

else

cmd1 | cmd3

fi

Jan Schaumann SCALE5x

Page 39: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 39

Useful Use of Cat

concatenate and print files (D’oh!)

cat * > file

feed file as input to another command in a particular order

{ echo $VAR1; cat file; cmd1; } | command

use as a NOOP

if condition; then

filter=cmd2

else

filter=cat

fi

cmd1 | ${filter} | cmd3

Jan Schaumann SCALE5x

Page 40: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 40

Useful Use of Cat

CAT5

CAT6

Jan Schaumann SCALE5x

Page 41: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 41

Why bother?

Jan Schaumann SCALE5x

Page 42: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 42

Why bother?

$2.95

Jan Schaumann SCALE5x

Page 43: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 43

Why bother?

$5.90

Jan Schaumann SCALE5x

Page 44: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 44

Why bother?

$11.80

Jan Schaumann SCALE5x

Page 45: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 45

Why bother?

$23.60

Jan Schaumann SCALE5x

Page 46: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 46

Why bother?

Jan Schaumann SCALE5x

Page 47: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 47

Why bother?

$47.20

Jan Schaumann SCALE5x

Page 48: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 48

Why bother?

$94.4

Jan Schaumann SCALE5x

Page 49: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 49

Why bother?

Jan Schaumann SCALE5x

Page 50: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 50

Why bother?

Jan Schaumann SCALE5x

Page 51: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 51

But...

Jan Schaumann SCALE5x

Page 52: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 52

But...

... I run my scripts only once!

Jan Schaumann SCALE5x

Page 53: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 53

But...

... I have super fast hardware!

Jan Schaumann SCALE5x

Page 54: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 54

But...

... I have super fast hardware!$ uptime

10:36AM up 254 days, 4 users, load averages: 80.12, 75.51, 72.40

$

Jan Schaumann SCALE5x

Page 55: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 55

But...

... nobody else but me uses my code!

Jan Schaumann SCALE5x

Page 56: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 56

Oh, really?

Unfortunately, you really have no control over your code:

Jan Schaumann SCALE5x

Page 57: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 57

Oh, really?

Unfortunately, you really have no control over your code:

code grows

Jan Schaumann SCALE5x

Page 58: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 58

Oh, really?

Unfortunately, you really have no control over your code:

code grows

code is reused

Jan Schaumann SCALE5x

Page 59: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 59

Oh, really?

Unfortunately, you really have no control over your code:

code grows

code is reused

code moves with you

Jan Schaumann SCALE5x

Page 60: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 60

Oh, really?

Unfortunately, you really have no control over your code:

code grows

code is reused

code moves with you

code is left behind

Jan Schaumann SCALE5x

Page 61: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 61

Oh, really?

Unfortunately, you really have no control over your code:

code grows

code is reused

code moves with you

code is left behind

It’s alive!

Jan Schaumann SCALE5x

Page 62: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 62

Oh, really?

Jan Schaumann SCALE5x

Page 63: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 63

Oh, really?

Jan Schaumann SCALE5x

Page 64: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 64

Useless Use of *

Useless Use of Cat

Jan Schaumann SCALE5x

Page 65: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 65

Useless Use of *

Useless Use of *

Jan Schaumann SCALE5x

Page 66: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 66

Useless Use of Grep

Jan Schaumann SCALE5x

Page 67: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 67

Useless Use of Grep

Of course, all use of grep(1) is useless!

Jan Schaumann SCALE5x

Page 68: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 68

Useless Use of Grep

Of course, all use of grep(1) is useless!

echo g/RE/p | ed -s file

Jan Schaumann SCALE5x

Page 69: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 69

Useful Use of Grep (?)

host hostname | grep ’has address’ | awk ’{ print $NF }’

echo ${string} | grep ’pattern’ | sed -e ’s/foo/bar/’

Jan Schaumann SCALE5x

Page 70: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 70

Useless Use of Grep

host hostname | grep ’has address’ | awk ’{ print $NF }’

echo ${string} | grep ’pattern’ | sed -e ’s/foo/bar/’

Jan Schaumann SCALE5x

Page 71: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 71

Useless Use of Grep

host hostname | grep ’has address’ | awk ’{ print $NF }’

host hostname | awk ’/has address/ { print $NF }’

echo ${string} | grep ’pattern’ | sed -e ’s/foo/bar/’

Jan Schaumann SCALE5x

Page 72: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 72

Useless Use of Grep

host hostname | grep ’has address’ | awk ’{ print $NF }’

host hostname | awk ’/has address/ { print $NF }’

echo ${string} | grep ’pattern’ | sed -e ’s/foo/bar/’

echo ${string} | sed -ne ’/pattern/ s/foo/bar/p’

Jan Schaumann SCALE5x

Page 73: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 73

Useful Use of Grep (?)

grep pattern1 file ... | grep -v pattern2

grep pattern1 file | grep -v ^# | grep -v pattern2

Jan Schaumann SCALE5x

Page 74: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 74

Useless Use of Grep

grep pattern1 file ... | grep -v pattern2

grep pattern1 file | grep -v ^# | grep -v pattern2

Jan Schaumann SCALE5x

Page 75: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 75

Useless Use of Grep

grep pattern1 file ... | grep -v pattern2

awk ’/pattern1/ && !/pattern2/ { print }’ file ...

grep pattern1 file | grep -v ^# | grep -v pattern2

Jan Schaumann SCALE5x

Page 76: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 76

Useless Use of Grep

grep pattern1 file ... | grep -v pattern2

awk ’/pattern1/ && !/pattern2/ { print }’ file ...

grep pattern1 file | grep -v ^# | grep -v pattern2

awk ’/pattern1/ && !/(ˆ#)|(pattern2)/ { print }’ file

Jan Schaumann SCALE5x

Page 77: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 77

Useful Use of Sed (?)

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

ls ${p}

done

Jan Schaumann SCALE5x

Page 78: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 78

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

ls ${p}

done

Jan Schaumann SCALE5x

Page 79: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 79

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done

Jan Schaumann SCALE5x

Page 80: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 80

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Sed

Jan Schaumann SCALE5x

Page 81: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 81

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Mknod ?

Jan Schaumann SCALE5x

Page 82: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 82

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Groff ?

Jan Schaumann SCALE5x

Page 83: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 83

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Shlock ?

Jan Schaumann SCALE5x

Page 84: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 84

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Route ?

Jan Schaumann SCALE5x

Page 85: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 85

Useless Use of Sed

for p in $(echo ${PATH} | sed -e ’s/:/ /’); do

IFS=":"; for p in ${PATH}; do

ls ${p}

done | awk ’BEGIN { srand() } { if (NR == int(rand()*100)) { print }}’

Dump ?

Jan Schaumann SCALE5x

Page 86: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 86

Useless Use of Sed

Jan Schaumann SCALE5x

Page 87: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 87

Useful Use of Sed (?)

VAR1="foo-bar-baz"

VAR2=$(echo ${VAR1} | sed -e ’s/-baz//’)

Jan Schaumann SCALE5x

Page 88: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 88

Useless Use of Sed

VAR1="foo-bar-baz"

VAR2=$(echo ${VAR1} | sed -e ’s/-baz//’)

Jan Schaumann SCALE5x

Page 89: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 89

Useless Use of Sed

VAR1="foo-bar-baz"

VAR2=$(echo ${VAR1} | sed -e ’s/-baz//’)

VAR2=${VAR1%-baz}

Jan Schaumann SCALE5x

Page 90: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 90

Useful Use of Sed (?)

Looping over values in a variable:

VAR1="foo-bar-baz"

for i in $(echo ${VAR1} | sed -e ’s/-/ /g’); do

the_needful $i

done

Jan Schaumann SCALE5x

Page 91: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 91

Useless Use of Sed

Looping over values in a variable:VAR1="foo-bar-baz"

for i in $(echo ${VAR1} | sed -e ’s/-/ /g’); do

IFS=-

for i in ${VAR1}; do

the_needful $i

done

Jan Schaumann SCALE5x

Page 92: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 92

Useful Use of Sed (?)

Assigning variables:

VAR1="foo-bar-baz"

VAR_A=$(echo ${VAR} | sed -e ’s/-*//’)

VAR_B=$(echo ${VAR} | sed -e ’s/[^-]*-\([^-]*\)-.*/\1/’)

VAR_C=$(echo ${VAR} | sed -e ’s/.*-//’)

Jan Schaumann SCALE5x

Page 93: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 93

Useless Use of Sed

Assigning variables:VAR1="foo-bar-baz"

VAR A=$(echo ${VAR} | sed -e ’s/-*//’)

VAR B=$(echo ${VAR} | sed -e ’s/[^-]*-[ˆ−]-.*/\1/’)

VAR C=$(echo ${VAR} | sed -e ’s/.*-//’)

IFS=-

set -- ${VAR1}

VAR_A="${1}"

VAR_B="${2}"

VAR_C="${3}"

Jan Schaumann SCALE5x

Page 94: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 94

Useless Use of ...

Dude, IFS + shell is Teh Roxor!!!1Look, Ma: Reading a CSV with Shell Only!

IFS=","

while read -r field1 waste field3 field4 waste; do

echo "${field1}: ${field4} --> ${field3}"

done <file

Jan Schaumann SCALE5x

Page 95: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 95

Useless Use of Shell Only

$ cat >script.sh

IFS=","

while read -r waste field2 field3 waste; do

echo "${field1}: ${field4} --> ${field3}"

done <file

^D

$ wc -l file

111061 file

$ time sh script.sh >/dev/null

12.33s real 3.30s user 8.54s system

$

Jan Schaumann SCALE5x

Page 96: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 96

Useless Use of Shell Only

Awk to the rescue!

$ cat >script2.sh

awk -F"," ’{ print $1 ": " $4 " --> " $3 }’ <file

^D

$ time sh script2.sh >/dev/null

1.08s real 1.08s user 0.00s system

$

Jan Schaumann SCALE5x

Page 97: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 97

Useful Use of Ls (?)

for file in $(ls *pattern*); do

the_needful

done

Jan Schaumann SCALE5x

Page 98: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 98

Useless Use of Ls

for file in $(ls *pattern*); do

for file in *pattern*; do

the_needful

done

Jan Schaumann SCALE5x

Page 99: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 99

Useful Use of Wc (?)

VAR=$(cat file | wc -l | sed -e ’s/ *//g)’

Jan Schaumann SCALE5x

Page 100: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 100

Useful Use of Wc (?)

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

Jan Schaumann SCALE5x

Page 101: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 101

Useless Use of ... ?

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

Jan Schaumann SCALE5x

Page 102: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 102

Useless Use of ... ?

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

Jan Schaumann SCALE5x

Page 103: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 103

Useless Use of ... ?

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

VAR=$(awk ’END { print NR }’ file)

Jan Schaumann SCALE5x

Page 104: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 104

Useless Use of Sed

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

VAR=$(wc -l <file)

Jan Schaumann SCALE5x

Page 105: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 105

Useless Use of Sed

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

VAR=$(wc -l <file)

echo "${VAR}"

Jan Schaumann SCALE5x

Page 106: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 106

Useless Use of Sed

VAR=$(cat file | wc -l | sed -e ’s/ *//g’)

VAR=$(wc -l <file| sed -e ’s/ *//g)’

VAR=$(wc -l <file)

echo "${VAR}"

echo ${VAR}

Jan Schaumann SCALE5x

Page 107: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 107

Useful Use of Head (?)

command1 | head -1 | sed -e ’s/pattern/string/’

command1 | head -10 | sed -e ’s/pattern/string/’

Jan Schaumann SCALE5x

Page 108: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 108

Useless Use of Head

command1 | head -1 | sed -e ’s/pattern/string/’

command1 | sed -e ’s/pattern/string/;q’

command1 | head -10 | sed -e ’s/pattern/string/’

Jan Schaumann SCALE5x

Page 109: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 109

Useless Use of Head

command1 | head -1 | sed -e ’s/pattern/string/’

command1 | sed -e ’s/pattern/string/;q’

command1 | head -10 | sed -e ’s/pattern/string/’

command1 | awk ’{ if (NR <= 10) { print gensub("pattern","string",0); } }’

Jan Schaumann SCALE5x

Page 110: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 110

Useful Use of Tail (?)

command1 | tail -1 | sed -e ’s/pattern/string/’

Jan Schaumann SCALE5x

Page 111: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 111

Useless Use of Tail

command1 | tail -1 | sed -e ’s/pattern/string/’

command1 | awk ’END { print gensub("pattern","string",0); exit; }’

Jan Schaumann SCALE5x

Page 112: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 112

Useful Use of Tail (?)

command1 | tail -10 | sed -e ’s/pattern/string/’

Jan Schaumann SCALE5x

Page 113: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 113

Useful Use of Tail

command1 | tail -10 | sed -e ’s/pattern/string/’

Jan Schaumann SCALE5x

Page 114: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 114

Useful Use of Expr (?)

echo $(expr $i + $i)

Jan Schaumann SCALE5x

Page 115: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 115

Useless Use of Expr

echo $(expr $i + $i)

echo $(( $i + $i ))

Jan Schaumann SCALE5x

Page 116: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 116

Useless Use of Expr

echo $(expr $i + $i)

echo $(( $i + $i ))

echo $(( $i << 1 ))

This even lets you do binary manipulation (binary and, or, xor, not, leftshift, rightshift).

Jan Schaumann SCALE5x

Page 117: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 117

Useless Use of Expr

echo $(expr $i + $i)

echo $(( $i + $i ))

echo $(( $i << 1 ))

This even lets you do binary manipulation (binary and, or, xor, not, leftshift, rightshift).

$ x=5

$ y=12

$ x=$(( ${x} ^ ${y} ))

$ y=$(( ${x} ^ ${y} ))

$ x=$(( ${x} ^ ${y} ))

$ echo "x=${x}; y=${y}"

x=12; y=5

$

Jan Schaumann SCALE5x

Page 118: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 118

Most Egregiously Useless Use of Perl

perl -e "print \"y\\nn\\n\";" | cmd

Jan Schaumann SCALE5x

Page 119: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 119

Most Egregiously Useless Use of Perl

perl -e "print \"y\\nn\\n\";" | cmd

( echo y; echo n; ) | cmd

Jan Schaumann SCALE5x

Page 120: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 120

Most Egregiously Useless Use of Perl

perl -e "print \"y\\nn\\n\";" | cmd

( echo y; echo n; ) | cmd

{ echo y; echo n; } | cmd

printf "y\nn\n" | cmd

Jan Schaumann SCALE5x

Page 121: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 121

Shell Coding: Performance

avoid file I/O

avoid Useless Use of *:

use builtins when you can

avoid builtins when it makes sense

use the right tool for the job

avoid spawning subshells (+1 fork) or pipes (n+1 forks)

Jan Schaumann SCALE5x

Page 122: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 122

Shell Coding: Performance

avoid file I/O

avoid Useless Use of *:

use builtins when you can

avoid builtins when it makes sense

use the right tool for the job

avoid spawning subshells (+1 fork) or pipes (n+1 forks)

cut -f2 vs. awk ’{print $2}’

$ stat -f "%z %N" /usr/bin/awk /usr/bin/cut

133487 /usr/bin/awk

12590 /usr/bin/cut

$

Jan Schaumann SCALE5x

Page 123: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 123

Testing Shell Code

make your code modular

clearly define each function:

pre-conditions

valid input

post-conditions

prepare valid input and desired output of each function

prepare invalid input and desired output of each function

Jan Schaumann SCALE5x

Page 124: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 124

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

Jan Schaumann SCALE5x

Page 125: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 125

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

$ cat >script.sh

set -u

echo ${FOO}

echo "done"

^D

$ sh script.sh

script.sh: FOO: parameter not set

$ echo $?

2

$

Jan Schaumann SCALE5x

Page 126: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 126

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

$ cat >script.sh

set -e

ls /nowhere

echo "done"

^D

$ sh script.sh

ls: /nowhere: No such file or directory

$

Jan Schaumann SCALE5x

Page 127: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 127

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

$ cat >script.sh

set -e

if ! ls /nowhere; then

echo "ls failed"

fi

echo "done"

^D

$ sh script.sh

ls: /nowhere: No such file or directory

ls failed

done

$

Jan Schaumann SCALE5x

Page 128: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 128

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

$ cat >script.sh

readonly VAR="foo"

VAR="bar"

echo ${VAR}

^D

$ sh script.sh

script.sh: VAR: is read only

$

Jan Schaumann SCALE5x

Page 129: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 129

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

Jan Schaumann SCALE5x

Page 130: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 130

Shell Coding Style: local variables

$ cat s.sh

func () {

input="${1}"

# do something with ${input}

}

$ cat script.sh

. ./s.sh

input="var1 var2 var3"

for var in ${input}; do

func "${var}"

done

echo ${input}

$ sh script.sh

var3

$

Jan Schaumann SCALE5x

Page 131: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 131

Shell Coding Style: local variables

$ cat s.sh

func () {

local input="${1}"

# do something with ${input}

}

$ cat script.sh

. ./s.sh

input="var1 var2 var3"

for var in ${input}; do

func "${var}"

done

echo ${input}

$ sh script.sh

var1 var2 var3

$

Jan Schaumann SCALE5x

Page 132: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 132

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

Jan Schaumann SCALE5x

Page 133: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 133

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

Bad:

# this adds 1 to num

num=$(( ${num} + 1 ))

Jan Schaumann SCALE5x

Page 134: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 134

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

Better:

input="pair1l:pair1r pair2l:pair2r"

# extract first pair in input string, throw away rest

p1l=${input%%:*}

rest=${input#*:}

p1r=${rest% *}

Jan Schaumann SCALE5x

Page 135: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 135

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

write your code in a modular way

Jan Schaumann SCALE5x

Page 136: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 136

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

write your code in a modular way

write test cases for your shell code

Jan Schaumann SCALE5x

Page 137: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 137

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

write your code in a modular way

write test cases for your shell code

be consistent in your style

Jan Schaumann SCALE5x

Page 138: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 138

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

write your code in a modular way

write test cases for your shell code

be consistent in your style

be consistent in your user interface

Jan Schaumann SCALE5x

Page 139: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 139

Shell Coding Style

Writing Shell Code is just like writing any other code:

set -eu (perl-mongers: think -w and use strict;)

use readonly variables

use local variables

comment your code

write your code in a modular way

write test cases for your shell code

be consistent in your style

be consistent in your user interface

be willing to sacrifice performance for readability

Jan Schaumann SCALE5x

Page 140: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 140

Shell Coding: Performance vs. Readability

awk -F: -v ME="${ME}" ’{ if ($0 ~ ME) { print $5 }}’ file

vs.

grep ${ME} file | cut -d: -f5

awk ’{w = w + NF} END { print w }’ file1 file2 file3

vs.cat file1 file2 file2 | wc -w

Jan Schaumann SCALE5x

Page 141: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 141

The KISS Principle

Keep It Simple, Stupid!

Jan Schaumann SCALE5x

Page 142: Useless Use of * Slide 1 · 2020-04-15 · Useless Use of * Slide 1 Useless Use of * Jan Schaumann jschauma@netmeister.org PGP: 136D 027F DC29 8402 7B42 47D6 7C5B 64AF AF22 6A4C Jan

Useless Use of * Slide 142

Useless Use of time (?)

Thanks!

Jan Schaumann SCALE5x