web-dev-qa-db-fra.com

Comment supprimer des numéros de ligne dans un bloc de code?

Généralement, les codes publiés dans les pages Web contiennent des numéros de ligne. Lorsque je copie et colle du code dans un éditeur de texte (bien que certains éditeurs de texte suppriment automatiquement les numéros de ligne, mais parfois, cela ne fonctionne pas), il devient fatiguant de supprimer les numéros de ligne.

Il doit exister certains outils d’analyse sed, awk ou linux pour le gérer.

Disons que j'ai le code ci-dessous, comment puis-je supprimer les numéros de ligne en toute sécurité avec les outils mentionnés ci-dessus?

   1 /*
   2  * Beep using pcm
   3  *
   4  * Copyright (c) by Takashi Iwai <[email protected]>
   5  *
   6  *   This program is free software; you can redistribute it and/or modify
   7  *   it under the terms of the GNU General Public License as published by
   8  *   the Free Software Foundation; either version 2 of the License, or
   9  *   (at your option) any later version.
  10  *
  11  *   This program is distributed in the hope that it will be useful,
  12  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  13  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14  *   GNU General Public License for more details.
  15  *
  16  *   You should have received a copy of the GNU General Public License
  17  *   along with this program; if not, write to the Free Software
  18  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  19  */
  20 
  21 #include <asm/io.h>
  22 #include <asm/irq.h>
  23 #include <linux/init.h>
  24 #include <linux/slab.h>
  25 #include <linux/input.h>
  26 #include <linux/pci.h>
  27 #include <linux/dma-mapping.h>
  28 #include <sound/core.h>
  29 #include <sound/control.h>
  30 #include "pmac.h"
  31 
  32 struct pmac_beep {
  33         int running;            /* boolean */
  34         int volume;             /* mixer volume: 0-100 */
  35         int volume_play;        /* currently playing volume */
  36         int hz;
  37         int nsamples;
  38         short *buf;             /* allocated wave buffer */
  39         dma_addr_t addr;        /* physical address of buffer */
  40         struct input_dev *dev;
  41 };
  42 
  43 /*
  44  * stop beep if running
  45  */
  46 void snd_pmac_beep_stop(struct snd_pmac *chip)
  47 {
  48         struct pmac_beep *beep = chip->beep;
  49         if (beep && beep->running) {
  50                 beep->running = 0;
  51                 snd_pmac_beep_dma_stop(chip);
  52         }
  53 }
  54 
  55 /*
  56  * Stuff for outputting a beep.  The values range from -327 to +327
  57  * so we can multiply by an amplitude in the range 0..100 to get a
  58  * signed short value to put in the output buffer.
  59  */
  60 static short beep_wform[256] = {
  61         0,      40,     79,     117,    153,    187,    218,    245,
  62         269,    288,    304,    316,    323,    327,    327,    324,
  63         318,    310,    299,    288,    275,    262,    249,    236,
  64         224,    213,    204,    196,    190,    186,    183,    182,
  65         182,    183,    186,    189,    192,    196,    200,    203,
  66         206,    208,    209,    209,    209,    207,    204,    201,
  67         197,    193,    188,    183,    179,    174,    170,    166,
  68         163,    161,    160,    159,    159,    160,    161,    162,
  69         164,    166,    168,    169,    171,    171,    171,    170,
  70         169,    167,    163,    159,    155,    150,    144,    139,
  71         133,    128,    122,    117,    113,    110,    107,    105,
  72         103,    103,    103,    103,    104,    104,    105,    105,
  73         105,    103,    101,    97,     92,     86,     78,     68,
  74         58,     45,     32,     18,     3,      -11,    -26,    -41,
  75         -55,    -68,    -79,    -88,    -95,    -100,   -102,   -102,
  76         -99,    -93,    -85,    -75,    -62,    -48,    -33,    -16,
  77         0,      16,     33,     48,     62,     75,     85,     93,
  78         99,     102,    102,    100,    95,     88,     79,     68,
  79         55,     41,     26,     11,     -3,     -18,    -32,    -45,
  80         -58,    -68,    -78,    -86,    -92,    -97,    -101,   -103,
  81         -105,   -105,   -105,   -104,   -104,   -103,   -103,   -103,
  82         -103,   -105,   -107,   -110,   -113,   -117,   -122,   -128,
  83         -133,   -139,   -144,   -150,   -155,   -159,   -163,   -167,
  84         -169,   -170,   -171,   -171,   -171,   -169,   -168,   -166,
  85         -164,   -162,   -161,   -160,   -159,   -159,   -160,   -161,
  86         -163,   -166,   -170,   -174,   -179,   -183,   -188,   -193,
  87         -197,   -201,   -204,   -207,   -209,   -209,   -209,   -208,
  88         -206,   -203,   -200,   -196,   -192,   -189,   -186,   -183,
  89         -182,   -182,   -183,   -186,   -190,   -196,   -204,   -213,
  90         -224,   -236,   -249,   -262,   -275,   -288,   -299,   -310,
  91         -318,   -324,   -327,   -327,   -323,   -316,   -304,   -288,
  92         -269,   -245,   -218,   -187,   -153,   -117,   -79,    -40,
  93 };
  94 
  95 #define BEEP_SRATE      22050   /* 22050 Hz sample rate */
  96 #define BEEP_BUFLEN     512
  97 #define BEEP_VOLUME     15      /* 0 - 100 */
  98 
  99 static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type,
 100                                unsigned int code, int hz)
 101 {
 102         struct snd_pmac *chip;
 103         struct pmac_beep *beep;
 104         unsigned long flags;
 105         int beep_speed = 0;
 106         int srate;
 107         int period, ncycles, nsamples;
 108         int i, j, f;
 109         short *p;
 110 
 111         if (type != EV_SND)
 112                 return -1;
 113 
 114         switch (code) {
 115         case SND_BELL: if (hz) hz = 1000;
 116         case SND_TONE: break;
 117         default: return -1;
 118         }
 119 
 120         chip = input_get_drvdata(dev);
 121         if (! chip || (beep = chip->beep) == NULL)
 122                 return -1;
 123 
 124         if (! hz) {
 125                 spin_lock_irqsave(&chip->reg_lock, flags);
 126                 if (beep->running)
 127                         snd_pmac_beep_stop(chip);
 128                 spin_unlock_irqrestore(&chip->reg_lock, flags);
 129                 return 0;
 130         }
 131 
 132         beep_speed = snd_pmac_rate_index(chip, &chip->playback, BEEP_SRATE);
 133         srate = chip->freq_table[beep_speed];
 134 
 135         if (hz <= srate / BEEP_BUFLEN || hz > srate / 2)
 136                 hz = 1000;
 137 
 138         spin_lock_irqsave(&chip->reg_lock, flags);
 139         if (chip->playback.running || chip->capture.running || beep->running) {
 140                 spin_unlock_irqrestore(&chip->reg_lock, flags);
 141                 return 0;
 142         }
 143         beep->running = 1;
 144         spin_unlock_irqrestore(&chip->reg_lock, flags);
 145 
 146         if (hz == beep->hz && beep->volume == beep->volume_play) {
 147                 nsamples = beep->nsamples;
 148         } else {
 149                 period = srate * 256 / hz;      /* fixed point */
 150                 ncycles = BEEP_BUFLEN * 256 / period;
 151                 nsamples = (period * ncycles) >> 8;
 152                 f = ncycles * 65536 / nsamples;
 153                 j = 0;
 154                 p = beep->buf;
 155                 for (i = 0; i < nsamples; ++i, p += 2) {
 156                         p[0] = p[1] = beep_wform[j >> 8] * beep->volume;
 157                         j = (j + f) & 0xffff;
 158                 }
 159                 beep->hz = hz;
 160                 beep->volume_play = beep->volume;
 161                 beep->nsamples = nsamples;
 162         }
 163 
 164         spin_lock_irqsave(&chip->reg_lock, flags);
 165         snd_pmac_beep_dma_start(chip, beep->nsamples * 4, beep->addr, beep_speed);
 166         spin_unlock_irqrestore(&chip->reg_lock, flags);
 167         return 0;
 168 }
 169 
 170 /*
 171  * beep volume mixer
 172  */
 173 
 174 static int snd_pmac_info_beep(struct snd_kcontrol *kcontrol,
 175                               struct snd_ctl_elem_info *uinfo)
 176 {
 177         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
 178         uinfo->count = 1;
 179         uinfo->value.integer.min = 0;
 180         uinfo->value.integer.max = 100;
 181         return 0;
 182 }
 183 
 184 static int snd_pmac_get_beep(struct snd_kcontrol *kcontrol,
 185                              struct snd_ctl_elem_value *ucontrol)
 186 {
 187         struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
 188         if (snd_BUG_ON(!chip->beep))
 189                 return -ENXIO;
 190         ucontrol->value.integer.value[0] = chip->beep->volume;
 191         return 0;
 192 }
 193 
 194 static int snd_pmac_put_beep(struct snd_kcontrol *kcontrol,
 195                              struct snd_ctl_elem_value *ucontrol)
 196 {
 197         struct snd_pmac *chip = snd_kcontrol_chip(kcontrol);
 198         unsigned int oval, nval;
 199         if (snd_BUG_ON(!chip->beep))
 200                 return -ENXIO;
 201         oval = chip->beep->volume;
 202         nval = ucontrol->value.integer.value[0];
 203         if (nval > 100)
 204                 return -EINVAL;
 205         chip->beep->volume = nval;
 206         return oval != chip->beep->volume;
 207 }
 208 
 209 static struct snd_kcontrol_new snd_pmac_beep_mixer = {
 210         .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 211         .name = "Beep Playback Volume",
 212         .info = snd_pmac_info_beep,
 213         .get = snd_pmac_get_beep,
 214         .put = snd_pmac_put_beep,
 215 };
 216 
 217 /* Initialize beep stuff */
 218 int __devinit snd_pmac_attach_beep(struct snd_pmac *chip)
 219 {
 220         struct pmac_beep *beep;
 221         struct input_dev *input_dev;
 222         struct snd_kcontrol *beep_ctl;
 223         void *dmabuf;
 224         int err = -ENOMEM;
 225 
 226         beep = kzalloc(sizeof(*beep), GFP_KERNEL);
 227         if (! beep)
 228                 return -ENOMEM;
 229         dmabuf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4,
 230                                     &beep->addr, GFP_KERNEL);
 231         input_dev = input_allocate_device();
 232         if (! dmabuf || ! input_dev)
 233                 goto fail1;
 234 
 235         /* FIXME: set more better values */
 236         input_dev->name = "PowerMac Beep";
 237         input_dev->phys = "powermac/beep";
 238         input_dev->id.bustype = BUS_ADB;
 239         input_dev->id.vendor = 0x001f;
 240         input_dev->id.product = 0x0001;
 241         input_dev->id.version = 0x0100;
 242 
 243         input_dev->evbit[0] = BIT_MASK(EV_SND);
 244         input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE);
 245         input_dev->event = snd_pmac_beep_event;
 246         input_dev->dev.parent = &chip->pdev->dev;
 247         input_set_drvdata(input_dev, chip);
 248 
 249         beep->dev = input_dev;
 250         beep->buf = dmabuf;
 251         beep->volume = BEEP_VOLUME;
 252         beep->running = 0;
 253 
 254         beep_ctl = snd_ctl_new1(&snd_pmac_beep_mixer, chip);
 255         err = snd_ctl_add(chip->card, beep_ctl);
 256         if (err < 0)
 257                 goto fail1;
 258 
 259         chip->beep = beep;
 260 
 261         err = input_register_device(beep->dev);
 262         if (err)
 263                 goto fail2;
 264  
 265         return 0;
 266  
 267  fail2: snd_ctl_remove(chip->card, beep_ctl);
 268  fail1: input_free_device(input_dev);
 269         if (dmabuf)
 270                 dma_free_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4,
 271                                   dmabuf, beep->addr);
 272         kfree(beep);
 273         return err;
 274 }
 275 
 276 void snd_pmac_detach_beep(struct snd_pmac *chip)
 277 {
 278         if (chip->beep) {
 279                 input_unregister_device(chip->beep->dev);
 280                 dma_free_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4,
 281                                   chip->beep->buf, chip->beep->addr);
 282                 kfree(chip->beep);
 283                 chip->beep = NULL;
 284         }
 285 }
 286 
7
kenn

Avec awk

awk '{$1="";print $0}' FileName > NewFileName

Explication:

  • awk divise l'entrée/le fichier en champs, avec un délimiteur par défaut d'espaces.
  • $1="" signifie "régler le premier champ" sur rien. Le premier champ de votre texte sera toujours le numéro de ligne. Nous supprimons donc essentiellement les numéros de ligne.
  • print $0 signifie "imprimer tous les champs", nous imprimons donc tous les champs, mais le premier champ est maintenant vide et ne sera pas imprimé.

awk gâche le formatage du code. Voir cette réponse pour plus d'informations sur la manière de le conserver.


Avec sed

sed 's/^ *[0-9]\+.//g' FileName > NewFileName

Explication:

  • sed 's/<replace this>/<with this>/g'.
  • ^ *[0-9]\+. signifie: correspond au début de la ligne (^), puis correspond à zéro ou plusieurs espaces (*), puis correspond à un chiffre compris entre 0 et 9 ([0-9] ), correspond à plus d'un chiffre (\+), puis à n'importe quel caractère (.).
  • Il n'y a rien entre //, nous remplaçons donc fondamentalement ce que nous venons de faire correspondre, nous le supprimons effectivement.

Crédit à réponse de Karel pour la commande sed.


Avec cut (et sed)

sed 's/^ *//g' FileName | cut -d' ' -f2- > NewFileName

Explication:

  • sed 's/^ *//g', où ^ * signifie: correspond au début de la ligne (^), puis correspond à zéro ou plusieurs espaces (*). Nous remplaçons ensuite ce que nous avons jumelé avec rien, pour le supprimer. Cette partie sed est utilisée pour supprimer tous les espaces de début du fichier.
  • cut est également un programme de manipulation de texte qui sépare les entrées dans les champs (à l'aide d'un délimiteur par défaut de tab).
  • -d' ' définit le délimiteur sur un espace. Le premier champ est donc notre nombre.
  • -f2- signifie que vous imprimez le deuxième champ (le dernier tiret - signifie "en avant").
14
Alaa Ali

Depuis le terminal:

sed 's/ *[0-9]*.//' script > script-no-line-numbers
4
karel

Dans certains éditeurs de texte tels que Geany ou (Notepad ++ uniquement sous Windows), cela peut être fait facilement. Il suffit de maintenir CTRL + ALT, puis de maintenir le clic gauche de la souris et de dessiner un rectangle autour de la zone numérotée.

1
Serjik

Si vous voulez une méthode qui fonctionne dans un éditeur de texte, vous pouvez utiliser la combinaison ctrlx + r + k couper une zone rectangulaire de texte dans emacs.

1
kasperd