Dokumentti muodostuu kappaleista. Eri kappaleissa saa yleensä olla samanlaisia rivejä joten vain kussakin kappaleessa sen omat duplikaatti-rivit voi poistaa. Tämänvuoksi dokumentin jokainen kappale täytyy erottaa omaan tiedostoonsa, suorittaa niille duplikaattien poisto ja koota sitten tiedostot yhteen. Tämä täytyy tehdä kahdessa vaiheessa sillä ensimmäinen vaihe tehdään tilanteesta riippuen erilailla:
1. Kun kappaleen alkurivillä on jotakin kappaleelle ominaista; esimerkiksi koodissa sana BEGIN. 
sed  '/kappaleelle_ominaista/ilisätty_rivi' tiedosto_jossa_kappaleet_ovat > /tmp/delmee0
2. Kun kappaleiden välissa on tyhjä rivi:
sed 's/^$/lisätty_rivi/g' tiedosto_jossa_kappaleet_ovat > /tmp/delmee0

Näin aikaansaatu aputiedostosta kappaleet sitten jaetaan omiin tiedostoihinsa:
awk -v RS="lisätty_rivi" '{ print $0 > "/tmp/delmee"NR }' /tmp/delmee0

kappaleet liitetään yhteen tiedostoksi( perättäiset tyhjät rivit supistetaan yhdeksi): 
rm -f /tmp/delmee; n=1; while true; do [[ -f /tmp/delmee$n ]] && { awk '!NF || !x[$0]++' /tmp/delmee$n > apu; cat -s /tmp/delmee apu >> /tmp/delmee ; ((n++));} || exit; done

lopuksi siistitty tiedosto on paikassa: /tmp/delmee
**
Seuraavat käskyt kertovat mistä on kyse:
echo "<<tulostetaan>>ei saa tulostua<<tulostetaan>>" |  grep -Po '(?<=<<).*(?=>>)'      # mikäli tag-ryhmiä on samalla rivillä useampia niin tuloste on väärä
ja:
echo "<<tulostetaan>>ei saa tulostua<<tulostetaan>>" |  grep -Po '(?U)(?<=<<).*(?=>>)'  # tämä taas tulostaa aina oikein. Ungreedy voi kylläkin myös sotkea
tätä voi jalostaa edelleen:
cat tiedosto |  grep -Po '(?Us)(?<=<<).*(?=>>)'                                         # Tämä on silloinkin oikein kun lohko ulottuu usealle riville
