Bash-remove-n-match

From I Will Fear No Evil
Revision as of 10:13, 17 November 2021 by Chubbard (talk | contribs)
Jump to navigation Jump to search

Really unique problem and resolution using awk found in reddit. [1]


input text1.txt has:
hi 1
hi 2
hi 3
hi 4
hi 5
hello

I want to delete 4 lines containing 'hi'
wanted output:

hi 5
hello

Unique answer:

awk '!/hi/||++n>4'

Possible alternate that would still require some work:

count=4 awk -e '
    /hi [[:digit:]]+/ && s++ < ENVIRON["count"] { next };
    {print};
' << EOT 
hi 1
hi 2
hi 3
hi 4
hi 5
hello
EOT