파일 내용의 색상을 조건부로 변경하려고 합니다. 내 파일은 다음과 같습니다
A B C D
Value Value Value Value
Value Value Value Value
Value Value Value Value
Value Value Value Value
내 명령은 cat file4 | sed "s,.*,${esc}[33m&${esc}[0m,"
이며 논리는 다음과 같습니다.
- 파일을 분류하고 sed 명령을 통해 ANSI 색상 코드를 사용하여 콘텐츠 색상을 편집합니다.
하지만 이 파일을 실행하면 생성된 파일이 예상한 대로 표시되지 않습니다.
[33mA B C D[0m
[33mValue Value Value Value [0m
[33mValue Value Value Value [0m
[33mValue Value Value Value [0m
[33mValue Value Value Value [0m
원하는 출력:
- 필드 A는 빨간색이어야 합니다.
- 필드 C는 파란색이어야 합니다.
- 필드 D는 노란색이어야 합니다.
- 필드 B는 녹색이어야 합니다.
답변1
우선 이것은 UUOC
(고양이의 쓸모없는 사용). cat
여기서 사용할 이유가 없으며, sed
그렇지 않은 경우에도 파일에서 stdin을 리디렉션하는 것은 파이핑하는 것과 동일합니다.
esc=$(echo -e '\e')
sed "s,\(.*\) \(.*\) \(.*\) \(.*\),$esc[31m\1 $esc[34m\2 $esc[33m\3 $esc[32m\4$esc[m," file4
이는 원래 지정한 대로 필드 사이에 두 개의 공백이 있다고 가정하지만 이에 따라 편집이 수행된 것으로 보입니다.
왜 원래 방식(한 줄의 모든 텍스트와 일치하고 두 이스케이프 코드(노란색) 사이에 래핑하면 여러 색상이 제공될 것이라고 생각하는지 모르겠습니다).