텍스트 교체를 위해 로그 파일의 특정 필드를 사용하십시오.

텍스트 교체를 위해 로그 파일의 특정 필드를 사용하십시오.

나는 이것을 가지고있다:

00:05:40.005 id=32214483 Src=PIPE <[email protected]> (received) [email protected] relayed (1234 bytes)

나는 이것을 달성해야합니다 :

00:05:40.005 id=32214483 [email protected] <[email protected]> (received) [email protected] relayed (1234 bytes)

참고 - 파일의 다른 데이터가 필요한 올바른 형식을 갖고 있기 때문에 데이터를 "열별로" 교환하여 전체 파일에 적용할 수 없습니다. Src=PIPE의 모든 인스턴스를 <> 기호 없이 다음 열의 데이터로 대체하고 싶습니다.

답변1

나는 Perl oneliner가 당신이 원하는 것을 할 것이라고 믿습니다:

perl -i.bak -pe 's/Src=PIPE\s+<(\w+?@\w+?\.\w+?)>\s+?/Src=$1 <$1> /;' [file(s)]

꺾쇠 괄호로 묶인 요소가 이메일 주소인지 확인하지 않고 이를 수행하는 또 다른 방법은 다음과 같습니다.

perl -i.bak -pe 's/Src=PIPE\s+<(.*?)>\s+?/Src=$1 <$1> /;' [file(s)]

-i.bak 명령줄에서 처리된 모든 파일을 백업합니다.

답변2

확인하다:

$ sed 's/PIPE <\(.*\)>/\1 <\1>/g' -i file.txt

관련 정보