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