Bash를 사용하여 문자열에서 패턴 제거

Bash를 사용하여 문자열에서 패턴 제거

파일 입력 문자열에서 일부 패턴을 제거하려고 합니다(파일을 한 줄씩 구문 분석). 다음은 문자열 예시입니다.

1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT     > [0x00,0xa2,…,0x00] 

출력이 다음과 같기를 원합니다.

(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]

egrep사용해 보았지만 sed지금까지 운이 없었습니다. 오류나 "종료되지 않은 대체 모드" 오류가 계속 발생했습니다. 제가 시도한 예는 다음과 같습니다.

echo $line | sed -e 's/.*\s\([0-9]*:[0-9]*:[0-9]*.[0-9]*\)'

어떤 도움이라도 대단히 감사하겠습니다. 나는 보통 bash보다 배치 파일을 선호합니다.애플 시스템/X.

편집하다:

나는 다음과 같은 파일을 읽고 있다고 언급해야 합니다:

while read line
do

line그런 다음 파일의 각 줄에 대해 작업을 수행 하고 싶습니다 .

답변1

perl에서 전화를 걸 수도 있습니다 bash. arg는 -n각 줄을 반복하게 만듭니다. -e스크립트가 한 줄이라는 뜻입니다.

cat in.txt | perl -ne 's{.*(.*\().*? (.*) -.*(:.*?)\s\s+.*(\[.*)}{$1$2$3 : $4};'

답변2

이는 예제 입력 라인에서 작동합니다.

 sed 's/.* \([0-9].*)\) .*>/(\1: RAW DATA OUT:/
 ' <<\DATA
 1: (10/17 12:49:31.175) - CONSTANT ID1 - CONSTANT ID2: RAW DATA OUT     > [0x00,0xa2,…,0x00]
 DATA

다음과 같이 인쇄됩니다.

(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]    

답변3

sed '
  s/^[^(]*//
  s/([^ ]\+ /(/
  s/ - CONSTANT ID//
  s/ \+>/ :/
' <<DATA
1: (10/17 12:49:31.175) - CONSTANT ID: RAW DATA OUT     > [0x00,0xa2,…,0x00]
DATA
(12:49:31.175): RAW DATA OUT : [0x00,0xa2,…,0x00]

원하는 경우 sed 스크립트의 개행 문자를 세미콜론으로 바꿀 수 있습니다.


읽는 동안 루프에서:

while read line; do
    echo "$line" | sed 's/^[^(]*//; s/([^ ]\+ /(/; s/ - CONSTANT ID//; s/ \+>/ :/'
done < filename

관련 정보