파일의 모든 단어에서 두 번째 모음을 강조 표시하는 방법은 무엇입니까?

파일의 모든 단어에서 두 번째 모음을 강조 표시하는 방법은 무엇입니까?

나는 단어의 모든 두 번째 모음을 빨간색으로 강조하려고 노력하고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

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

추신. 불분명하게 해서 죄송합니다.

모든 단어의 두 번째 모음을 빨간색으로 강조 표시하고 싶습니다.

답변1

  1. 명령 대체는 작은따옴표로 수행되지 않으며 대신 큰따옴표를 사용해야 합니다.
  2. \e[1;30m변수가 아니므로 할 수 없습니다 ${\e[1;30m}.

노력하다:

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

여기서는 작은따옴표를 닫고 큰따옴표를 사용한 다음 작은따옴표를 다시 엽니다.

답변2

당신은 seds///2구조를 오해하고 있습니다. 두 번째 단어마다 수행되는 것은 아니며 모든 줄에서 두 번째 일치만 수행됩니다. o 각 단어의 두 번째 모음을 강조 표시하려면 먼저 단어를 식별해야 합니다. 쉽고 쉬운 방법은 공백을 줄 바꿈으로 변환하고 실행 sed한 다음 다시 변환하는 것입니다.

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

그러나 이는 후행 개행 없이 문자열을 반환합니다. 추가하자면 echo전체 내용은 다음과 같습니다.

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

예제 출력:

여기에 이미지 설명을 입력하세요

관련 정보