ksh/bash는 sed를 사용하여 cat file|sed 명령을 사용하여 파일 형식을 지정합니다.

ksh/bash는 sed를 사용하여 cat file|sed 명령을 사용하여 파일 형식을 지정합니다.

파일 내용의 색상을 조건부로 변경하려고 합니다. 내 파일은 다음과 같습니다

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,"이며 논리는 다음과 같습니다.

  1. 파일을 분류하고 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

이는 원래 지정한 대로 필드 사이에 두 개의 공백이 있다고 가정하지만 이에 따라 편집이 수행된 것으로 보입니다.

왜 원래 방식(한 줄의 모든 텍스트와 일치하고 두 이스케이프 코드(노란색) 사이에 래핑하면 여러 색상이 제공될 것이라고 생각하는지 모르겠습니다).

관련 정보