Quelle est la difference entre sed 's / jour / nuit /' <ancien> nouveau et sed 's / jour / nuit /' ancien> nouveau

0

Sed - Une introduction et un tutoriel de Bruce Barnett a ceci dans La commande essentielle: s pour substitution :

Un exemple simple consiste à remplacer "jour" dans le "vieux" fichier par "nuit" dans le "nouveau" fichier:

sed s/day/night/ <old >new

Ou d'une autre manière (pour les débutants UNIX),

sed s/day/night/ old >new

Quelle est la différence? Pourquoi Bruce Barnett précise-t-il qu'une méthode est "pour les débutants UNIX"?

Je peux voir que cela oldest utilisé comme entrée dans les deux situations, et que cela newest utilisé comme sortie dans les deux situations. Le supplément <fait-il une différence?

Ordonezalex
la source

Réponses:

4

En pratique, cela ne change pas grand chose. En fait, la première variante vous limite à un fichier alors que la seconde permet à sed de concaténer plusieurs entrées en une sortie, ainsi que d'utiliser son option d'édition in-situ.

La différence technique est que l'ancienne méthode avec <et >repose exclusivement sur la redirection du shell, une fonction générique qui Unix dans un premier temps était célèbre pour - en raison de sa simplicité et d' être complètement générique et réutilisable à travers de nombreux programmes: le shell ouvre le fichier et vous les mains un descripteur de fichier.

(Les autres systèmes de l'époque manquaient complètement de redirection ou nécessitaient plusieurs commandes pour l'activer.)

Ce dernier redirige également la sortie, mais pas la saisie. Au lieu de cela, il demande à lui-même d'ouvrir le fichier d'entrée - quelque chose que chaque programme doit implémenter seul, en utilisant éventuellement des syntaxes incohérentes qu'il vous faudrait apprendre et réapprendre; Par exemple, un outil peut vouloir --input=original.txt --output=processed.txtet un autre -in original.txt. Mais OTOH, comme je l’ai mentionné, est également plus flexible en ce sens que vous ne vous limitez pas à une entrée en lecture seule.


Personnellement, cependant, je dirais que grouper la deuxième syntaxe sous "... pour les débutants Unix" n'est que l'élitisme ou le pédantisme des années 1980, du même genre que de donner des conférences à des personnes pour leur utilisation cat foo | barou se moquer des utilisateurs de Windows & VMS pour ne pas être "éclairé à la philosophie Unix".

Grawity
la source
1

Il semble que Bruce soit un "streamiste", quelqu'un qui croit en "tout est un flux d'octets" au point où ils considèrent de passer des fichiers en tant que paramètres, ce que seuls les débutants voudraient faire. Quelques raisons pour lesquelles je préfère généralement la deuxième façon de faire:

  1. C'est plus court.
  2. C'est syntaxiquement plus simple.
  3. Il permet d’utiliser par exemple -i[suffix]le remplacement sur place sans beaucoup de ressources supplémentaires pour échanger des fichiers.
  4. Il fonctionne bien avec d'autres outils tels que xargs.
l0b0
la source