나는 단어의 모든 두 번째 모음을 빨간색으로 강조하려고 노력하고 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
cat room.txt | sed 's:[AEIOU]:$(printf "${\e[1;30m}&${\e[0m}"):i2'
추신. 불분명하게 해서 죄송합니다.
모든 단어의 두 번째 모음을 빨간색으로 강조 표시하고 싶습니다.
답변1
- 명령 대체는 작은따옴표로 수행되지 않으며 대신 큰따옴표를 사용해야 합니다.
\e[1;30m
변수가 아니므로 할 수 없습니다${\e[1;30m}
.
노력하다:
sed 's:[AEIOU]:'"$(printf "\e[1;30m&\e[0m")"':i2' room.txt
여기서는 작은따옴표를 닫고 큰따옴표를 사용한 다음 작은따옴표를 다시 엽니다.
답변2
당신은 sed
의 s///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' ' ' )