cat file | sed 명령으로 sed를 통한 파일 형식화


2

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

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는 녹색이어야합니다.

답변:


2

첫째, 이것은 UUOC( cat의 쓸모없는 사용 )입니다. cat여기서 사용할만한 이유가 없으며 sed파일 자체를 완벽하게 읽을 수 있으며 파일이 아니더라도 파일에서 표준 입력을 리디렉션하는 것은 파이핑하는 것과 같습니다.

esc=$(echo -e '\e')
sed "s,\(.*\)  \(.*\)  \(.*\)  \(.*\),$esc[31m\1  $esc[34m\2  $esc[33m\3  $esc[32m\4$esc[m," file4

이것은 원래 지정한대로 필드 사이에 두 개의 공백이 있다고 가정하지만 편집 한 것 같습니다. 그에 따라 조정하십시오.

나는 당신이 왜 원래의 방식을 생각했는지 전혀 모른다.


<space> 로직을 어떻게 관리했는지 알려주십시오
Aman

그것은 단지 필드에서 3 개의 값에 색상을 제공한다는 버그가 있습니다. 나는 열 A의 경우 한 색상의 모든 값, 열 B의 경우 한 색상의 모든 열 등
Aman

예를 들어 탭으로 구분하는 것이 항상 더 쉽습니다. 당신이 확신하는 경우 열 값은 다음을 대체 공백을 포함하지 않습니다 .*와 함께 [^ ]*. 게다가 입력에 정확히 4 개의 열이 정확히 2 개의 공백으로 구분되고 후행 공백이없는 한 스크립트가 제대로 작동합니다.
wurtel

그것의 지금 작동 :)
Aman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.