Suite

Quelle est l'expression pour obtenir un sous-ensemble de caractères dans QGIS Field Calculator ?

Quelle est l'expression pour obtenir un sous-ensemble de caractères dans QGIS Field Calculator ?


J'ai une colonne de 10 noms de caractères, par ex. L3NAM1988K. Comment puis-je supprimer les 5 premiers caractères et le dernier caractère à l'aide d'une expression dans le calculateur de champs QGis ?


Utilisez lesubstrfonction sousChaîne de caractèresliste par exemple :substr( 'L3NAM1988K', 6, 4 )


Introduction

Ce cours se concentre sur les techniques d'automatisation des flux de travail SIG. Vous apprendrez des techniques qui vous aideront à être plus productif, à créer de belles visualisations et à résoudre des problèmes d'analyse spatiale complexes. Ce cours est idéal pour les participants qui utilisent déjà QGIS et qui souhaitent améliorer leurs compétences.

Voici les sujets abordés dans cette classe

  • Framework de traitement - Algorithmes, traitement par lots et modeleur
  • Animer des données de séries chronologiques
  • Création de survols 3D à partir d'images aériennes
  • Expressions avancées pour permettre une édition plus rapide des données, une correspondance approximative, et plus encore.

Avant de faire les exercices, cela vous aidera à en apprendre un peu plus sur l'open source et sur le fonctionnement du projet QGIS.


le premier argument de grep est un motif, une expression régulière. grep renvoie les lignes qui contiennent le motif donné dans ce premier argument. le ^ signifie commencer par.

Rendons cela reproductible :

Si vous n'êtes pas à l'aise avec regex, il existe une fonction dans le package utils, qui peut convertir des expressions basées sur des caractères génériques en regex. Donc tu peux faire

Je pense que vous voulez opter pour une expression régulière :

Dans l'expression régulière, le "^" signifie startwith, et  pour le prochain jeu de caractères va être un mot. Les expressions régulières sont un puissant outil de traitement de texte qui nécessitent une certaine étude. Il existe de nombreux tutoriels et sites internet en ligne. L'un d'entre eux que j'utilise est :

Je ne peux pas utiliser R pour le moment (l'ordinateur portable de ma femme)), donc ces morceaux de code ne sont pas testés. Peut-être que la prochaine fois, fournissez-nous un exemple de jeu de données, ce qui facilitera grandement la fourniture d'un exemple fonctionnel.


1 réponse 1

s est le raccourci d'expression régulière GNU pour écrire l'expression POSIX [[:blank:]] , qui correspond à un espace ou à un caractère de tabulation ( s correspond également aux retours à la ligne si ceux-ci ont été insérés dans l'espace de motif de sed au moyen de autres commandes d'édition). La notation s vient à l'origine des expressions régulières Perl, mais dans une expression régulière Perl, elle fonctionne comme [[:space:]] dans une expression POSIX, correspondant à un éventail plus large de caractères produisant de l'espace.

remplace un ou plusieurs espaces/tabulations consécutifs par un seul espace, puis répète la substitution jusqu'à ce qu'il n'y ait plus de correspondances sur la ligne actuelle.

Donc, oui, vous auriez pu utiliser s/s+/g à la place, mais c'est un élargi (GNU) plutôt qu'une expression de base, vous devrez donc ajouter -E à la commande :

Cela utilise maintenant une option non standard ( -E ) et Expressions régulières spécifiques à GNU ( s ). Pour écrire la commande d'une manière conforme à la norme, vous devrez utiliser soit

où <1,>signifie la même chose que les modificateurs d'expression régulière étendus + et <1,>("un ou plusieurs").


Mes erreurs

Je pratique l'algorithme de recherche de chaînes depuis janvier 2015. Mais je ne suis toujours pas doué pour penser aux cas extrêmes. J'ai fait quelques erreurs dans les premières pratiques, et finalement je suis sorti du cas de test ci-dessus pour couvrir tous les cas limites.

Je fais toujours ces erreurs courantes. Visitez la table de hachage sans vérifier d'abord que la clé existe dans le dictionnaire. La seconde est de considérer deux cas, soit dans le dictionnaire, soit non dans le dictionnaire. La troisième consiste à maintenir la valeur du dictionnaire en ajoutant un ou en diminuant un.


Syntaxe

Classe d'entités ou couche d'entités qui sera convertie.

Emplacement dans lequel la classe d'entités en sortie sera créée. Il peut s'agir d'une géodatabase ou d'un dossier. Si l'emplacement de sortie est un dossier, la sortie sera un fichier de formes.

Nom de la classe d'entités en sortie.

Une expression SQL utilisée pour sélectionner un sous-ensemble de fonctionnalités. Pour plus d'informations sur la syntaxe SQL, consultez la rubrique d'aide Référence SQL pour les expressions de requête utilisées dans ArcGIS.

Les champs et le contenu des champs choisis dans la classe d'entités en entrée. Vous pouvez ajouter, renommer ou supprimer des champs de sortie ainsi que définir des propriétés telles que le type de données et la règle de fusion.

Vous pouvez utiliser la classe ArcPy FieldMappings pour définir ce paramètre.

Spécifie les paramètres de stockage (configuration) pour les géodatabases dans les géodatabases fichier et d'entreprise. Les géodatabases personnelles n'utilisent pas de mots-clés de configuration.


Parfois, il est nécessaire qu'un paramètre accepte plusieurs types de données, souvent appelés type de données composite. Dans une boîte à outils Python, les types de données composites sont définis en attribuant une liste de types de données à la propriété datatype du paramètre. Dans l'exemple ci-dessous, un paramètre est défini qui accepte un jeu de données raster ou un catalogue raster.

Un jeu de données utilisé pour le géocodage qui stocke les attributs d'adresse, les index associés et les règles qui définissent le processus de traduction des descriptions non spatiales des lieux en données spatiales.

Un modèle sur lequel baser le nouveau localisateur d'adresses.

La taille de cellule utilisée par les outils raster.

Un type de données qui accepte n'importe quelle valeur.

Un fichier qui contient une carte, sa mise en page et ses couches, tableaux, graphiques et rapports associés.

Un type et une valeur d'unité de surface, tels que le mètre carré ou l'acre.

Une source de données vectorielles mélangée avec des types d'entités et une symbologie. Le jeu de données n'est pas utilisable pour les requêtes ou les analyses basées sur les classes d'entités.

Le nœud de niveau supérieur dans l'arborescence du catalogue.

La taille de cellule utilisée par ArcGIS Spatial Analyst エクステンション .

Définit les deux côtés d'une cellule raster.

Une référence à plusieurs couches enfants, y compris la symbologie et les propriétés de rendu.

Spécifie le type de compression utilisé pour un raster.

Un cadre de référence, tel que le système UTM constitué d'un ensemble de points, de lignes et/ou de surfaces, et un ensemble de règles utilisées pour définir les positions des points dans l'espace à deux et trois dimensions.

Dossier des systèmes de coordonnées

Un dossier sur disque stockant les systèmes de coordonnées.

Un jeu de données de couverture, un modèle de données propriétaire pour stocker des entités géographiques sous forme de points, d'arcs et de polygones avec des tables attributaires d'entités associées.

Une classe d'entités de couverture, telle qu'un point, un arc, un nœud, un itinéraire, un système d'itinéraire, une section, un polygone et une région.

Un jeu de données visible dans ArcCatalog .

Le dossier de connexion à la base de données dans ArcCatalog .

Une collection de données connexes, généralement regroupées ou stockées ensemble.

Données d'attribut stockées au format dBASE.

Spécifie un sous-ensemble de nœuds d'un TIN pour créer une version généralisée de ce TIN.

Chemin d'accès à un périphérique de stockage de données.

Tout nombre à virgule flottante stocké sous forme de valeur 64 bits en double précision.

Chaîne cryptée pour les mots de passe.

Les paires de coordonnées qui définissent le rectangle de délimitation minimum dans lequel se trouve la source de données.

La plage de valeurs d'échelle et la valeur d'incrément appliquée aux entrées dans une opération de superposition pondérée.

Spécifie les paires de coordonnées qui définissent le rectangle de délimitation minimum (xmin, ymin et xmax, ymax) d'une source de données. Toutes les coordonnées de la source de données se trouvent dans cette limite.

Un paramètre de valeurs d'extraction.

Une collection de données spatiales avec le même type de forme : point, multipoint, polyligne et polygone.

Ensemble de classes d'entités qui partagent une zone géographique commune et le même système de référence spatiale.

Une référence à une classe d'entités, y compris la symbologie et les propriétés de rendu.

Fonctionnalités interactives qui dessinent les fonctionnalités lorsque l'outil est exécuté.

Colonne d'une table qui stocke les valeurs d'un seul attribut.

Les détails d'un champ dans un FieldMap.

Une collection de champs dans une ou plusieurs tables d'entrée.

Spécifie un emplacement sur le disque où les données sont stockées.

Surface raster dont les valeurs de cellule sont représentées par une formule ou une constante.

Spécifie l'algorithme utilisé dans la fuzzification d'un raster en entrée.

Une collection de données avec un thème commun dans une géodatabase.

Objet à gros grains qui référence une géodatabase.

Un réseau linéaire représenté par des entités de bord et de jonction connectées topologiquement. La connectivité des entités est basée sur leur coïncidence géométrique.

Une référence à une source de données géostatistiques, y compris la symbologie et les propriétés de rendu.

Quartier de recherche géostatistique

Définit les paramètres de voisinage de recherche pour une couche géostatistique.

Tableau des valeurs géostatistiques

Ensemble de sources de données et de champs qui définissent une couche géostatistique.

Un ensemble de calques qui apparaissent et agissent comme un seul calque. Les couches de groupe facilitent l'organisation d'une carte, l'attribution d'options d'ordre de dessin avancées et le partage de couches à utiliser dans d'autres cartes.

La relation entre le facteur de coût horizontal et l'angle de déplacement relatif horizontal.

Structure de données utilisée pour accélérer la recherche d'enregistrements dans des ensembles de données géographiques et des bases de données.

Une syntaxe pour définir et manipuler des données dans une table INFO.

Une table dans une base de données INFO.

Un jeu de données LAS stocke la référence à un ou plusieurs fichiers LAS sur disque ainsi qu'à des entités surfaciques supplémentaires. Un fichier LAS est un fichier binaire qui stocke les données lidar aéroportées.

Couche qui référence un jeu de données LAS sur disque. Cette couche peut appliquer des filtres sur des fichiers lidar et des contraintes de surface référencés par un jeu de données LAS.

Une référence à une source de données, telle qu'un fichier de formes, une couverture, une classe d'entités de géodatabase ou un raster, y compris la symbologie et les propriétés de rendu.

Un fichier de couche stocke une définition de couche, y compris la symbologie et les propriétés de rendu.

Une forme, droite ou courbe, définie par une série connectée de paires de coordonnées x,y uniques.

Un type et une valeur d'unité linéaire tels que le mètre ou les pieds.

Une plage de valeurs les plus basses et les plus élevées possibles pour les coordonnées m.

Une collection de données raster et image qui vous permet de stocker, d'afficher et d'interroger les données. Il s'agit d'un modèle de données dans la géodatabase utilisé pour gérer une collection de jeux de données raster (images) stockés sous forme de catalogue et visualisés sous forme d'image mosaïquée.

Couche qui référence une mosaïque.

La forme de la zone autour de chaque cellule utilisée pour calculer les statistiques.

Network Analyst Class FieldMap

Mappage entre les propriétés d'emplacement dans une couche Network Analyst (telles que les arrêts, les ressources et les incidents) et une classe d'entités ponctuelles.

Paramètres de hiérarchie Network Analyst

Attribut de hiérarchie qui divise les valeurs de hiérarchie d'un jeu de données réseau en trois groupes à l'aide de deux entiers. Le premier entier définit la valeur de fin du premier groupe, le deuxième nombre définit la valeur de début du troisième groupe.

Une couche de groupe spéciale utilisée pour exprimer et résoudre les problèmes de routage réseau. Chaque sous-couche conservée en mémoire dans une couche Network Analyst représente un aspect du problème de routage et de la solution de routage.

Une source de données réseau peut être un jeu de données local spécifié à l'aide de son chemin de catalogue ou d'une couche d'une carte, ou il peut s'agir d'une URL vers un portail.

Ensemble d'éléments de réseau connectés topologiquement (arêtes, jonctions et virages), dérivés de sources de réseau et associés à un ensemble d'attributs de réseau.

Une référence à un jeu de données réseau, y compris la symbologie et les propriétés de rendu.

Un dictionnaire d'objets de mode de déplacement.

Un atelier parcellaire est un jeu de données pour le stockage, la maintenance et la modification d'une surface continue de parcelles ou de réseau parcellaire connectés.

Couche référençant un atelier parcellaire sur disque. Ce calque fonctionne comme un groupe de calques organisant un ensemble de calques liés sous un seul calque.

Une séquence connectée de paires de coordonnées x,y, où la première et la dernière paire de coordonnées sont identiques.

Un fichier stockant les informations du système de coordonnées pour les données spatiales.

Spécifie si des pyramides sont construites.

Spécifie les points environnants utilisés pour l'interpolation.

Spécifie la graine et le générateur à utiliser lors de la création de valeurs aléatoires.

Une couche dans un jeu de données raster.

Expression du calculateur raster

Une expression de calculatrice raster.

Ensemble de jeux de données raster définis dans une table. Chaque enregistrement de table définit un jeu de données raster individuel dans le catalogue.

Une référence à un catalogue d'images, y compris la symbologie et les propriétés de rendu.

Un jeu de données unique construit à partir d'un ou plusieurs rasters.

Une référence à un raster, y compris la symbologie et les propriétés de rendu.

Spécifie si les statistiques raster sont générées.

Les données raster sont ajoutées à une mosaïque en spécifiant un type de raster. Le type raster identifie les métadonnées, telles que le géoréférencement, la date d'acquisition et le type de capteur, avec un format raster.

Type de tableau interactif dans les valeurs du tableau lors de l'exécution de l'outil.

Les détails sur la relation entre les objets de la géodatabase.

Un tableau qui définit la façon dont les valeurs de cellule raster sont reclassées.

Propriétés de l'événement de mesure d'itinéraire

Spécifie les champs d'une table qui décrivent les événements mesurés par un système d'itinéraire de référence linéaire.

Un jeu de données schématiques contient une collection de modèles de diagrammes schématiques et de classes d'entités schématiques qui partagent le même domaine d'application, par exemple, l'eau ou l'électricité.

Une classe de diagramme schématique.

Une couche schématique est une couche composite composée de couches d'entités basées sur les classes d'entités schématiques associées au modèle sur lequel le diagramme schématique est basé.

Spécifie la distance et la direction représentant deux emplacements utilisés pour quantifier l'autocorrélation.

Données spatiales au format shapefile.

Le système de coordonnées utilisé pour stocker un jeu de données spatiales, y compris le domaine spatial.

Une syntaxe pour définir et manipuler les données d'une base de données relationnelle.

Une chaîne masquée par des caractères *.

Le texte n'est pas chiffré lorsqu'il est utilisé dans les scripts.

Une représentation de données tabulaires à des fins de visualisation et d'édition, stockées en mémoire ou sur disque.

Une référence à un terrain, y compris la symbologie et les propriétés de rendu. Il est utilisé pour dessiner un terrain.

Spécifie la largeur et la hauteur des données stockées dans le bloc.

Spécifie les périodes utilisées pour calculer le rayonnement solaire à des emplacements spécifiques.

Un type et une valeur d'unité de temps tels que des minutes ou des heures.

Structure de données vectorielles qui divise l'espace géographique en triangles contigus et non superposés. Les sommets de chaque triangle sont des exemples de points de données avec des valeurs x, y et z.

Une référence à un TIN, y compris les relations topologiques, la symbologie et les propriétés de rendu.

Caractéristiques qui sont entrées dans l'interpolation.

Topologie qui définit et applique des règles d'intégrité des données pour les données spatiales.

Une référence à une topologie, y compris la symbologie et les propriétés de rendu.

Une fonction de transformation Spatial Analyst.

Une collection de colonnes de valeurs.

Une valeur de données qui peut contenir n'importe quel type de base : booléen, date, double, long et chaîne.

Spécifie la relation entre le facteur de coût vertical et l'angle de déplacement relatif vertical.

Données spatiales stockées au format de produit vectoriel.

Données d'attribut stockées au format de produit vectoriel.

Web Coverage Service (WCS) est une spécification ouverte pour le partage de jeux de données raster sur le Web.

Une table avec des données pour combiner plusieurs rasters en appliquant une échelle de mesure commune de valeurs à chaque raster, en pesant chacun selon son importance.

Spécifie les données pour la superposition de plusieurs rasters, chacun multiplié par leur poids donné et additionné.


1 réponse 1

Il n'y a pas d'espace avant la parenthèse sur une variante enum

dériver s sont combinés en une seule ligne.

Faites de la priorité une méthode inhérente à Token .

A l'intérieur de precedence , match sur le déréférencement de la valeur. Cela évite la propagation de & .

Il n'y a pas besoin de lazy_static, il suffit de créer une structure et d'y mettre l'expression régulière, puis de la réutiliser dans la boucle.

Il n'y a pas besoin de la grande quantité d'allocation de chaînes. Prenez un &str au lieu d'une chaîne et découpez-le simplement.

Au lieu de rogner l'entrée par les caractères de l'opérateur, ignorez le nombre d'octets du premier caractère.

Il n'est pas nécessaire de spécifier le type d'analyse.

Le code coupe la gauche plusieurs fois, faites-le une seule fois.

Il n'est pas nécessaire de spécifier le type de file d'attente car il est inférable.

Il n'est pas nécessaire d'utiliser la liaison @ pattern, vous pouvez simplement utiliser token .

Créez un nouveau type autour de Vec<Token> pour indiquer que les données sont dans l'ordre RPN. Les types évitent le besoin de documentation.

Créez plusieurs types d'énumérations, l'une avec parenthèses et l'autre sans. Ensuite, il y a un endroit de moins pour avoir un injoignable . S'il y a des sous-ensembles, vous pouvez intégrer le sous-ensemble dans le sur-ensemble.

La gestion des erreurs est assez rude pour l'utilisateur final. Des parenthèses incompatibles tuent le programme au lieu d'expliquer l'erreur et de laisser l'utilisateur continuer. Il n'y a aucun moyen (évident) de quitter le programme autre qu'en le tuant ou en fermant stdin (ce qui produit un autre message d'erreur).

Je ne suis pas vraiment satisfait de l'aspect analyse du code, mais je ne vois pas de meilleure chose évidente pour le moment.

Comme l'a souligné Francis Gagné, vous pouvez appeler Chars::as_str pour obtenir le reste de la chaîne après avoir extrait le premier caractère :

Je ne comprends pas l'intérêt de créer une toute nouvelle structure uniquement pour la fonction tokenizer lorsque lazy_static ! peut faire la même chose

De même, je ne comprends pas l'intérêt d'utiliser lazy_static ! quand les constructions de langage normales peuvent faire la même chose ^_^.

paresseux_statique ! nécessite actuellement une allocation de tas et cette mémoire ne peut jamais être récupérée tant que le programme n'est pas terminé.

La création d'une valeur et l'utilisation d'une référence à celle-ci sont totalement sécurisées par la sémantique et les durées de vie de Rust, je me retrouve donc à utiliser des allocations de pile beaucoup plus fréquemment qu'avec un langage comme le C.

Je n'aime généralement pas les singletons de quelque sorte que ce soit, pour les raisons invoquées sur Internet. Dans ce cas, le singleton est créé dans le binaire final, ce qui améliore quelque peu le problème.


Il y a ici deux niveaux d'interprétation : le shell et sed.

Dans le shell, tout ce qui se trouve entre les guillemets simples est interprété littéralement, à l'exception des guillemets simples eux-mêmes. Vous pouvez effectivement avoir un guillemet simple entre guillemets simples en écrivant ''' (guillemet simple fermé, guillemet simple littéral, guillemet simple ouvert).

Sed utilise des expressions régulières de base. Dans un BRE, afin de les traiter littéralement, les caractères $.*[^ doivent être entre guillemets en les faisant précéder d'une barre oblique inverse, sauf à l'intérieur des jeux de caractères ( […] ). Lettres, chiffres et ()<>+?| ne doit pas être cité (vous pouvez vous en tirer en citant certains d'entre eux dans certaines implémentations). Les séquences ( , ) , , et dans certaines implémentations < , >, + , ? , | et d'autres barres obliques inverses + caractères alphanumériques ont des significations particulières. Vous pouvez vous en tirer en ne citant pas $^ à certaines positions dans certaines implémentations.

De plus, vous avez besoin d'une barre oblique inverse avant / si elle doit apparaître dans l'expression régulière en dehors des expressions entre crochets. Vous pouvez choisir un autre caractère comme délimiteur en écrivant, par exemple, s

p vous aurez besoin d'une barre oblique inverse avant le délimiteur si vous souhaitez l'inclure dans le BRE. Si vous choisissez un caractère qui a une signification particulière dans un BRE et que vous souhaitez l'inclure littéralement, vous aurez besoin de trois barres obliques inverses. Je ne le recommande pas, car il peut se comporter différemment dans certaines implémentations.

  • Écrivez la regex entre guillemets simples.
  • Utilisez ''' pour vous retrouver avec un guillemet simple dans l'expression régulière.
  • Mettez une barre oblique inverse avant $.*/[]^ et uniquement ces caractères (mais pas dans les expressions entre crochets). (Techniquement, vous ne devriez pas mettre de barre oblique inverse avant ] mais je ne connais pas d'implémentation qui traite ] et ] différemment en dehors des expressions entre crochets.)
  • À l'intérieur d'une expression entre crochets, pour que - soit traité littéralement, assurez-vous qu'il s'agit du premier ou du dernier ( [abc-] ou [-abc] , pas [abc] ).
  • À l'intérieur d'une expression entre crochets, pour que ^ soit traité littéralement, assurez-vous qu'il est ne pas d'abord (utilisez [abc^] , pas [^abc] ).
  • Pour inclure ] dans la liste des caractères correspondant à une expression entre crochets, faites-en le premier caractère (ou le premier après ^ pour un ensemble nié) : []abc] ou [^]abc] (pas [abc]] ni [abc]] ).
  • & et doivent être mis entre guillemets en les faisant précéder d'une barre oblique inverse, tout comme le délimiteur (généralement / ) et les retours à la ligne.
  • suivi d'un chiffre a une signification particulière. suivi d'une lettre a une signification spéciale (caractères spéciaux) dans certaines implémentations, et suivi d'un autre caractère signifie c ou c selon l'implémentation.
  • Avec des guillemets simples autour de l'argument ( sed 's/…/…/' ), utilisez ''' pour mettre un guillemet simple dans le texte de remplacement.

Si l'expression régulière ou le texte de remplacement provient d'une variable shell, rappelez-vous que

  • L'expression régulière est un BRE, pas une chaîne littérale.
  • Dans l'expression régulière, une nouvelle ligne doit être exprimée sous la forme (qui ne correspondra jamais à moins que vous n'ayez un autre code sed ajoutant des caractères de nouvelle ligne à l'espace de motif). Mais notez que cela ne fonctionnera pas à l'intérieur des expressions entre crochets avec certaines implémentations sed.
  • Dans le texte de remplacement, & , et les nouvelles lignes doivent être entre guillemets.
  • Le délimiteur doit être entre guillemets (mais pas à l'intérieur des expressions entre crochets).
  • Utilisez des guillemets doubles pour l'interpolation : sed -e "s/$BRE/$REPL/" .

Le problème que vous rencontrez n'est pas dû à l'interpolation et aux échappements du shell - c'est parce que vous essayez d'utiliser la syntaxe d'expression régulière étendue sans passer à sed l'option -r ou --regexp-extended.

Changez votre ligne sed de

et cela fonctionnera comme je crois que vous l'entendez.

Par défaut, sed utilise des expressions régulières de base (pensez au style grep), ce qui nécessiterait la syntaxe suivante :

À moins que vous ne vouliez interpoler une variable shell dans l'expression sed, utilisez des guillemets simples pour l'ensemble de l'expression car ils font que tout ce qui se trouve entre elles est interprété tel quel, y compris les barres obliques inverses.

Donc, si vous voulez que sed voit s/(127.0.1.1)s/1/ mettez des guillemets simples autour et le shell ne touchera pas aux parenthèses ou aux barres obliques inverses. Si vous devez interpoler une variable shell, mettez uniquement cette partie entre guillemets. Par exemple.

Cela vous évitera de vous rappeler quels métacaractères du shell ne sont pas échappés par des guillemets doubles.

Je pense qu'il vaut la peine de mentionner que, bien que sed soit basé sur la norme POSIX, qui spécifie la prise en charge uniquement des expressions régulières de base (BRE), il existe en réalité deux versions différentes de la commande sed - BSD (Mac OS) et GNU (distributions Linux) . Chaque version implémente des extensions similaires et uniques à la norme POSIX et peut affecter la fonctionnalité de sed sur différentes plates-formes. Par conséquent, une syntaxe correcte de la commande sed, fonctionnant comme prévu sur un système, peut en fait se traduire par des résultats complètement différents sur un autre. Cela peut entraîner un comportement inattendu en ce qui concerne l'utilisation de caractères d'échappement et spéciaux.

Ces extensions de la norme POSIX ont tendance à être plus répandues sur la version GNU de sed, offrant souvent la commodité d'un formatage moins strict, en particulier par rapport à la version BSD. Cependant, bien que GNU sed autorise la fonctionnalité de certains caractères spéciaux, ils ne sont toujours pas réellement compatibles POSIX. De plus, la seule vraie différence entre les expressions régulières basiques et étendues (ERE), dans GNU sed, est le comportement des caractères spéciaux suivants :

Bien que cela puisse être le cas, certains caractères spéciaux ont une prise en charge limitée ou inexistante sur BSD sed, tels que « | », « ? » et « + », car ils respectent plus étroitement les normes de syntaxe POSIX. L'inclusion de ces personnages, d'une manière similaire à celle de GNU sed, entraînera souvent des problèmes de portabilité et de fonctionnalité des scripts utilisant sed. Il convient également de noter que la syntaxe POSIX BRE ne définit pas de signification pour certaines séquences d'échappement, notamment : |, +, ?, `, ', <, >, , B, w et W,.

Pour ceux qui utilisent la version BSD/Mac OS de sed, émuler le comportement de certains caractères spéciaux peut être un peu délicat, mais cela peut être fait dans la plupart des cas. Par exemple, + pourrait être émulé d'une manière compatible POSIX comme ceci : <1,>et ? ressemblerait à ceci : <0,1>Les séquences de caractères de contrôle, cependant, ne sont généralement pas prises en charge. Dans la mesure du possible, il est certainement plus facile d'utiliser GNU sed, mais si vous avez besoin de fonctionnalités sur les deux plates-formes, n'oubliez pas d'utiliser uniquement les fonctionnalités POSIX, pour assurer la portabilité. Si vous êtes un utilisateur Mac et que vous souhaitez profiter de GNU sed par opposition à BSD sed, vous pouvez essayer d'installer Homebrew et de télécharger GNU sed via la ligne de commande avec : $brew install gnu-sed.

Pour conclure, les différences de version peuvent vraiment dicter à quoi pourrait ressembler la syntaxe appropriée, ou quels caractères sont nécessaires pour s'échapper. J'espère que cela fournira un contexte supplémentaire pour la question initiale ainsi que la réponse acceptée, et aidera les autres à réfléchir à la manière dont ils devraient procéder, en fonction de l'objectif final de leur script et de l'utilisation de leurs commandes.


1 réponse 1

C'est l'acte de baisser une paupière inférieure et de tirer la langue et de dire "Beh-da!" (Japonais) ou "Nyaaaah!" (Dub anglais). Une expression hautement ritualisée de dédain ou de désapprobation, utilisé exclusivement par les enfants et les adultes immatures. Fondamentalement le même que l'acte occidental de tirer la langue, augmenté de quelques crans, mais certainement pas un geste profane.

Au Japon, cela s'appelle akanbe (une corruption de akai moi, "red eye"), et il s'appelle mon oeil ("my eye") en France et au Québec. C'est en fait un trope culturel franco-japonais, mais vous le verrez partout dans l'anime.

Je n'ai pas pu trouver de lien suffisamment satisfaisant ou crédible quant à son origine, mais d'après le wiki d'akanbe, il semble remonter au 20e siècle :

L'utilisation du terme a été mentionnée pour la première fois par l'auteur du début du XXe siècle, Katai Tayama, dans son histoire de 1909 Inaka Kyōshi (田舎教師 Enseignant rural), comme un geste utilisé par les étudiants masculins de l'histoire.


Voir la vidéo: Merge shapefiles and field calculator in QGIS 3. burdGIS