Wie hebt man den zweiten Vokal jedes Wortes in einer Datei hervor?

Wie hebt man den zweiten Vokal jedes Wortes in einer Datei hervor?

Ich versuche, jeden zweiten Vokal in einem Wort rot hervorzuheben. Was mache ich falsch?

cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'

P.S. Entschuldigen Sie die Unklarheit.

Ich möchte, dass der 2. Vokal jedes Wortes rot hervorgehoben wird.

Antwort1

  1. Die Befehlsersetzung erfolgt nicht in einfachen Anführungszeichen, Sie müssen stattdessen doppelte Anführungszeichen verwenden.
  2. \e[1;30mist keine Variable, daher können Sie nichts tun ${\e[1;30m}.

Versuchen:

sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt

Hier schließe ich das einfache Anführungszeichen, verwende dann doppelte Anführungszeichen und öffne das einfache Anführungszeichen anschließend wieder.

Antwort2

Sie verstehen die Konstruktion sedvon falsch s///2. Das wird nicht jedes zweite Wort ausführen, sondern nur die zweite Übereinstimmung in jeder Zeile. Um den zweiten Vokal jedes Wortes hervorzuheben, müssen Sie zuerst die Wörter identifizieren. Eine einfache Möglichkeit besteht darin, Leerzeichen in Zeilenumbrüche umzuwandeln, Ihre auszuführen sedund dann wieder zurück umzuwandeln:

tr ' ' $'\n' < room.txt | 
    sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | 
        tr $'\n' ' ' 

Das gibt jedoch einen String ohne abschließende Zeilenumbrüche zurück. Um das hinzuzufügen, einfach echodas Ganze:

echo $(tr ' ' $'\n' < room.txt | 
      sed 's:[AEIOU]:'"$(printf "\e[1;31m&\e[0m")"':i2' | tr $'\n' ' ' )

Beispielausgabe:

Bildbeschreibung hier eingeben

verwandte Informationen