사람들은 이 임무를 어떻게 수행할 것인가?
나는 tr로 그것을 시도했고 이것을 생각해 냈습니다 (다른 유사한 질문의 도움을 받아):
tr -c '[:alnum:]' '[\n*]' < long_concatenated_file
그런데... 문제가 있습니다. :alnum:
단지 문자와 숫자의 목록일 뿐입니다. 읽은 후 나는 이 상황을 완화하려고 노력합니다 man
.
tr -c '[:alnum:=-=]' '[\n*]' < long_concatenated_file
대시가 있는 단어는 교체할 항목 목록에 포함되어야 하지만, 어떤 이유에서는 그렇지 않습니다.
이 작업을 수행하는 올바른 방법은 무엇입니까?
명확하게 말하면 최종 목표는 sort | uniq -c | sort -nr
이를 적용하고 프로젝트에서 가장 많이 사용되는 문자열을 식별하여 문제 해결 방법이 전혀 의미가 없고 일부 해결해야 하는 경우 이를 편리한 상수로 변환하는 것입니다. 다른 방법으로는 몇 가지 제안을 해주세요.
답변1
-
단어가 아닌 모든 문자(영숫자)를 개행 문자로 바꾼 다음 이를 단어가 아닌 문자 집합에 포함시키려는 것 같습니다 .
이를 위해 (여기서는 유효한 단어 문자 tr
도 포함했으며 출력에서 연속된 개행 문자를 제거하는 데 사용했습니다):'
-s
tr -s -c "[:alnum:]-'" '\n'
[=-=]
또는 원하는 경우 동등 클래스를 사용하십시오.
tr -s -c "[:alnum:][=-=]'" '\n'
답변2
@Kusalandra, 답변해 주셔서 감사합니다. 하지만 그건 제가 하고 싶은 일이 아닙니다. 내 목표는 :alnum: set 또는 '-' 문자로 구성된 각 단어를 별도의 줄에 인쇄하는 것입니다.
결과 시퀀스는 다음과 같은 새 클래스를 생성하는 것입니다.
cat longfile | tr -c '[[:alnum:]-]' '[\n*]'
내가하고 싶은 일을하세요.
예:
$echo aaa-abc asdasd asswdwew | tr -c '[[:alnum:]-]' '[\n*]'
aaa-abc asdasd asswdwew