나만의 "맞춤" 역할 생성/사용

나만의 "맞춤" 역할 생성/사용

사용할 수 있는 자신만의 ASCII 문자를 만드는 것이 가능합니까? 그렇다면 어떻게 해야 합니까?

#12345이제 내 사용 사례는 다음과 같습니다. 역할을 생성 하고 내가 만든 일부 스크립트에 대한 사용자 정의 로그를 생성하며 각 필드를 새 역할로 구분하려고 한다고 가정해 보겠습니다 . 예를 들면 다음과 같습니다.

ID #12345 Host #12345 User #12345 Message #12345 Timestamp
1 #12345 host1 #12345 user1 #12345 This user did this this and that #12345 11:11:11
2 #12345 host1 #12345 user2 #12345 This other user did this new thing #12345 11:11:51

그래서 내가 맞춤 문자를 원하는 이유는 각 필드의 텍스트에 모든 문자를 포함할 수 있기를 원하고(그리고 내 맞춤 문자가 있을 가능성은 거의 없음) awk -F '#12345' '{print $4}'무엇에 관계없이 메시지와 함께 awk를 사용하여 쉽게 조작할 수 있기 때문입니다. 실제로는 메시지에 있지만 ,키 값 쌍 사이에 가 있고 ,메시지에도 가 있을 수 있기 때문에 일반적으로 json 형식의 출력에 문제가 있습니다.

내 질문은 "json을 구문 분석하는 방법"이 아니기 때문에 중복이 아니며 단지 내 사용 사례일 뿐입니다. 내 질문은 내가 사용할 수 있는 사용자 정의 캐릭터를 만드는 것입니다.

답변1

특정 질문에 대해 가능한 유일한 대답은 "아니요. ASCII 문자는 0-127 사이의 값을 갖는 미리 정의된 7비트 문자 세트이며 각 값에는 특정 의미가 할당됩니다. 추가하거나 변경할 범위가 없습니다. 그들을".

하지만 그것은 당신이 정말로 묻고 싶은 질문이 아닌 것 같습니다. 모든 입력 데이터에 대해 작동이 보장되는 고유한 구분 기호가 있는지(또는 있을 수 있는지) 알고 싶습니다.

일반적으로 대답은 '아니요'입니다. 불가능하고 존재하지 않습니다.

그러나 특정 상황(즉, 알려졌거나 쉽게 발견되는 특성을 가진 입력 데이터)에서는 데이터 필드에서 찾을 가능성이 없거나 불가능하다고 보장되는 문자를 찾는 것이 가능한 경우가 많습니다.

대부분의 사람들은 TAB을 "데이터에 표시할 수 없는" 구분 기호로 사용합니다. :콜론이 일반적으로 사용되는 시간 필드나 기타 데이터가 없으면 널리 사용됩니다(예: /etc/passwd). 그리고 쉼표는 다양한 상황에서 사용할 수 있습니다.

어떤 사람들은 올바른 형식의 CSV(예:그리고구분 기호를 포함할 수 있는 문자열 필드 주위에는 따옴표가 있습니다. 다른 것들은 JSON이나 XML 또는 기타 구조화된 텍스트 형식을 사용합니다. 여기서 데이터를 정확하게 추출하려면 좋은 파서가 필요합니다.

이론적으로는 bash에서 그러한 파서를 작성할 수 있습니다. 실제로는 실제로는 원하지 않습니다. 작업에 적합한 도구를 사용하는 것보다 훨씬 더 많은 작업이 필요합니다. 또는 느리고 매우 제한적인 좋은 파서를 작성하는 것보다 올바른 언어(C, Perl 또는 Python)를 사용하는 것보다 훨씬 더 많은 작업이 필요합니다. bash와 같은 언어)


추가 정보: 다른 질문에서는 bash 스크립트에서 "타사 도구"를 사용하는 데 문제가 있다고 생각하는 것 같습니다. 그것은 사실이 아닙니다. 쉘 스크립트는 여러 타사 도구 간의 "접착제" 및 "조정자" 역할을 하는 것입니다. 이것이 sh/bash가 잘하는 일입니다.

답변2

ASCII가 아닌 UNICODE를 의미한다고 가정하면 해결책은 다음과 같습니다.유니코드 문자 데이터베이스.

FAQ의 "기본 질문"을 보면 귀하의 목표는 할당되지 않은 역할을 사용하는 것인 것 같습니다. 이는 분명히 "개인 사용 영역" 내에 있어야 합니다."일관적인 유니코드 구현".

자세한 정보(예: FAQ가 너무 많아서)이봐.

답변3

표시된 것처럼 로그 파일을 구문 분석하는 것은 그리 어렵지 않은 것 같습니다.아니요매직 구분 기호를 제안합니다 #12345. 이 제안이 만족스럽지 못하다는 점을 먼저 지적하겠다”고 말했다.각 필드의 텍스트에 모든 문자를 포함할 수 있기를 원합니다."하지만 어쨌든 나는 호스트 이름, 사용자 이름, 타임스탬프를 기반으로 이것을 제안하고 싶습니다.아마도공백이 없습니다.

cat log

ID Host User Message Timestamp
1 host1 user1 This user did this this and that 11:11:11
2 host1 user2 This other user did this new thing 11:11:51

while IFS=' ' read -r id host user message
do
    timestamp="${message##* }" message="${message% *}"
    printf "%s - %s - %s - %s - %s\n" "$id" "$host" "$user" "$message" "$timestamp"
done <log

ID - Host - User - Message - Timestamp
1 - host1 - user1 - This user did this this and that - 11:11:11
2 - host1 - user2 - This other user did this new thing - 11:11:51

관련 정보