# Comment supprimer la fin du texte en shell

**URL:** <https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826 "2016-02-21T02:34:49Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/1 "2016-02-21T02:34:49Z")

</div>

comment supprimer la fin du texte:

`SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21
 SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25
 SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21 SEQ=1769809304
 SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306 SEQ=96534528 ACK=0`

de façon a obtenir:

[code]SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21  
SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25  
SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21  
SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306

[/code]  
il s’agit de suprimer: SEQ= ? et ACK= ?  
mai vu que la fin change sans arrêt et que je maîtrise ni awk ni sed …

j’utilise ulog pour les log d’iptables et je voudrai juste filtrer ce qui m’interesse:

```auto

```

j’ai tenter avec un `cat /var/log/ulog/syslogemu.log |cut -d" " -f10- |cut -d" " -f1,2,3,4,10,11,12,13,13| sed 's/\(*\)SEQ/\test/'`  
mai non c’est pas sa .  
merci d’avance

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/2 "2016-02-21T02:34:50Z")

</div>

```auto
Ca remplace "espace SEQ= un nombre" par rien et pareil pour ACK.
```

Ca remplace “espace SEQ= un nombre” par rien et pareil pour ACK.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/3 "2016-02-21T02:34:50Z")

</div>

bonjour,

étant donné qu’il y a de la récurrence, sed est le moins adapté

```auto
awk ' { while ($NF ~ /SEQ=|ACK=/) { $NF=""; NF-- } {print } }' <<EOF
> SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21
> SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25
> SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21 SEQ=1769809304
> SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306 SEQ=96534528 ACK=0
> EOF
SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21
SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25
SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21
SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306
```

attention, ce code est basé sur le fait que ACK ou SEQ sont en dernière colonne

EDIT : suivant les versions de awk $NF="" peut être omis

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/4 "2016-02-21T02:34:51Z")

</div>

> [@Totor](#):
>
> étant donné qu’il y a de la récurrence, sed est le moins adapté

Pourquoi donc ? Il traite toutes les lignes l’une après l’autre. Le code est plus simple et pose moins d’hypothèse que ta version awk.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/5 "2016-02-21T02:34:51Z")

</div>

parce que je ne sais pas si l’ordre de ‘SEQ puis ACK’ (qui doivent se trouver en fin de ligne si j’ai bien compris) est toujours dans ce sens.  
mais tout cela dépend d’informations que l’on ne possède pas et de notre interprétation de la demande 😉

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/6 "2016-02-21T02:34:52Z")

</div>

[quote=“Totor”]parce que je ne sais pas si l’ordre de ‘SEQ puis ACK’ (qui doivent se trouver en fin de ligne si j’ai bien compris) est toujours dans ce sens.  
mais tout cela dépend d’informations que l’on ne possède pas et de notre interprétation de la demande 😉[/quote]  
Peut être as-tu mal lu ma commande sed ? Il y a deux expressions qui sont indépendante l’un de l’autre. Il y a deux contraintes dans mon code :  
[ul]  
[li]aucun des deux ne doit être en première position[/li]  
[li]ils doivent être suivi par des entiers naturels[/li][/ul]  
On peut lever ces deux limitations ainsi, je pense :

```auto

```

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/7 "2016-02-21T02:34:57Z")

</div>

😮  
ça me parait bien compliqué !

bon, si tu tiens à sed :

```auto
sed -r 'e: s/ (SEQ|ACK)=[0-9]+$//; t e' <<EOF
SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21
SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25
SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21 SEQ=1769809304
SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306 SEQ=96534528 ACK=0
EOF
```

par contre, la version de sed que j’ai à dispo ne gère pas les ERE (mais simplement les ER). je ne peux donc garantir cette syntaxe (je testerai une fois rentrée chez moi ce soir)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/8 "2016-02-21T02:34:58Z")

</div>

ça me parait bien compliqué ![/quote]  
Tu as bien raison, je suis allé vite.

quote="Totor"bon, si tu tiens à sed :

`
sed -r 'e: s/ (SEQ|ACK)=[0-9]+$//; t e' <<EOF
SRC=186.215.60.39 DST=91.122.100.104 LEN=41 PROTO=UDP SPT=56796 DPT=26000 LEN=21
SRC=111.241.136.139 DST=91.122.100.104 LEN=52 DF PROTO=TCP SPT=4369 DPT=25
SRC=79.255.158.211 DST=91.122.100.104 LEN=48 PROTO=TCP SPT=50745 DPT=21 SEQ=1769809304
SRC=200.35.96.235 DST=91.122.100.104 LEN=40 SPT=6000 DPT=3306 SEQ=96534528 ACK=0
EOF
`[/quote]  
Par contre ta version est complexe encore on peut faire la même chose ainsi :

```auto
sed -r 's/ (SEQ|ACK)=[0-9]+//g'
```

> [@Totor](#):
>
> par contre, la version de sed que j’ai à dispo ne gère pas les ERE (mais simplement les ER). je ne peux donc garantir cette syntaxe (je testerai une fois rentrée chez moi ce soir)

Je l’ai vérifié sur :

`GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de reproduction.
AUCUNE garantie n'est donnée; y compris pour des RAISONS COMMERCIALES ou
pour RÉPONDRE A UN BESOIN PARTICULIER, à l'étendue permise par la loi.`

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/9 "2016-02-21T02:34:58Z")

</div>

merci pour la vérif.  
l’étiquette et le branchement conditionnel ne sont effectivement pas nécessaire. Mais la version de sed que j’utilise sur AIX n’est pas récursive et j’avais dû les utiliser. C’est pourquoi je les avais laisser :

```auto
:e
s/ SEQ=[0-9]\{1,\}$//
s/ ACK=[0-9]\{1,\}$//
t e
```

merci pour les précisions.

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 2:34 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/10 "2016-02-21T02:34:59Z")

</div>

D’ailleurs j’ai oublié de dire mais ma version compliquée, l’était surtout à cause des espaces dans les cas où ACK ou SEQ peuvent être en début de ligne comme en fin.

---

<div class="post-metadata">

**Author:** ![panthere](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/p/5daacb/32.png) [@panthere](https://www.debian-fr.org/u/panthere)\
**Post date:** [Février 21, 2016, 2:35 UTC](https://www.debian-fr.org/t/comment-supprimer-la-fin-du-texte-en-shell/32826/11 "2016-02-21T02:35:12Z")

</div>

Merci pour vos réponse

voila le code utiliser (bon je suis débutant en shell)

```auto
sed -r 's/ (SEQ|ACK)=[0-9]+//g'
```

et sa donne:

```auto
cat /var/log/ulog/syslogemu.log |cut -d" " -f10- |cut -d" " -f1,2,3,4,10,11,12,13,13 |sed -r 's/ (SEQ|ACK)=[0-9]+//g'
```

Merci beaucoup  
pour les débutant sa permet d’afficher les log d’iptables, mai pour être précis il s’agis du  
paquet ulogd (ou ulog), sa permet juste de séparer les entrée dans un fichier séparer ![8)](https://www.debian-fr.org/uploads/default/original/1X/ae031e9834d19166598edd060b063d44f1829139.gif "Cool")

Edit: j’ai vu qu’il manquait 2 ou 3 petite chose 😆

```auto
cat /var/log/ulog/syslogemu.log |cut -d" " -f10- |cut -d" " -f1,2,3,4,9,10,11,12,13,14 |sed -r 's/ (SEQ|ACK)=[0-9]+//g' |sed "s/\PROTO=//g" |sed "s/\DF//g" |sed "s/\CE//g" |sed -r 's/ (WINDOW)=[0-9]+//g' |sed "s/\ \ */\ /g" |sort

```
