-5
votes

Comment minuscule et remplacer les espaces dans Bash?

in php: xxx

Comment faire la même chose dans un script Bash?


6 commentaires

Je pense que vous pouvez exécuter PHP en mode console où il prend une entrée de Stdin et des impressions sur stdout


Alternativement, utilisez Perl: perl -wple '$ _ = LC $ _; $ _ = ~ s / [^ a-z] / _ / g '


Cela ne fonctionne pas: $ SORTIE = $ INPUT >> PHP -R PREG_REPLACE ("/ [^ A-Z] /", "_", Strtolower (Fgets (STDIN)));


Que pensez-vous que votre extrait à faire? Ce n'est pas du tout une syntaxe shell valide. Peut-être que votre question est de savoir comment envoyer des informations sur Stdin à un programme de la coquille?


La question semble être: quelles sont les commandes équivalentes pour atteindre le même effet. Je trouve le tout à fait adéquat et je suis surpris d'où vient toute la confusion.


Veuillez consulter Comment créer un exemple minimal, complet et vérifiable .


4 Réponses :


0
votes

php à bash? xxx


3 commentaires

Veuillez inclure $ entrée et $ de variables de sortie dans votre ligne Bash


@simpatico, vous aurez vraiment besoin d'apprendre comment fonctionne la coquille. Il n'y a pas de "variables d'entrée" et de "variables de sortie". Vous devez piloter les valeurs dans le programme appelé. Vous devrez apprendre la programmation Shell, mais ce site ne consiste pas à apprendre à programmer.


Ou: J'ai appris comment la coquille travaille et écrit plusieurs scripts Bash, mais il y a une lacune à ma connaissance que je demande humblement ici. Reconnaissant à ceux qui connaissent et répondent.



6
votes

recherchez-vous Substitution de motif strong> ( $ {paramètre / modèle / chaîne} code>) et modification de cas strong> ( $ {paramètre , modèle} code>)? Si tel est le cas, vous en trouverez plus dans homme bash code> sous Le sujet de expansion de paramètre fort>.

$ a="FOO BAR BLUB"
$ tmp=${a// /_}
$ echo ${tmp,,}
foo_bar_blub


1 commentaires

Micha, j'ai cité votre dernière phrase dans ma réponse.



5
votes

Nécessite Bash4 (testé avec 4.3.48).

En supposant que vous ne voulez jamais de caractère majuscule dans la valeur de la variable sortie code>, je proposerais ce qui suit: p> xxx pré>

  • Typeset -L sortie code>: Définit la variable pour être minuscule uniquement. De homme bash code>: p>

    Lorsque la variable est attribuée une valeur, tous les majuscules sont convertis en minuscules. P> blockQuote> li>

  • sortie = $ {entrée /// / _} code>: remplace tous les espaces avec un soulignement. P> Li> ul>

    BTW: il y a aussi TypeetSet -u variable code> pour le définir comme "tout uplase". Voir Man Bash Code>. P>


    MISE À JOUR: En revisitionnant, j'ai réalisé que ma réponse correspond au titre de la question de la question, mais pas le code PHP. Dans l'exemple PHP, tous les caractères qui sont non forts> a-z code> sont remplacés par un soulignement. Donc, si entrée code> contient un côlon ou une virgule, ceux-ci seraient également remplacés par le soulignement. P>

    Voici un code qui correspond également à ce que: P>

    typeset -l output
    output=${input//[^a-z]/_}
    


5 commentaires

Merci de m'avoir appris sur typeet -l !


Dans Bash-3.2, je reçois "Typeset: -L: Option non valide" et à l'homme bash, les options sont uniquement - -a, -f, -i, -r, -t et -x


Mise à niveau vers Bash-4.4 Il fonctionne


@simpatico mise à jour à Bash 4. * était une bonne idée. La plupart des gens ici assumeront que nous parlons de Bash4 en répondant aux questions. BTW: Bash5 est sorti il ​​y a quelques jours, mais j'attendrais la mise à jour de cela.


@ user7369280, la dernière valeur par défaut de MacOS est toujours bash-3.2. Le dernier sur MacPorts est de 4,4 et pour l'utiliser, le script doit commencer avec #! / USR / bin / env bash



0
votes

Ceci fonctionne: xxx

$ entrée est simplement une variable définie dans le script Bash.

alternativement, an@user7369280's réponse fonctionne aussi depuis Bash4 +.


0 commentaires