이 명령은 파일을 가져와 각 단어를 분리하여 한 줄에 표시합니다.

이 명령은 파일을 가져와 각 단어를 분리하여 한 줄에 표시합니다.

약 17523개의 단어가 포함된 파일이 있고 각 단어를 별도의 줄에 있도록 분리하고(단어는 연속된 문자 시퀀스로 정의되므로 1개의 문자 단어는 포함되지 않음) 모든 빈 줄을 삭제해야 합니다. 왜 이것이 작동하지 않는지 모르겠습니다.

cat file.txt | tr [[:upper:]] [[:lower:]] | tr -d '\n' | tr " " '\n'

답변1

Grep의 -o옵션은 이에 적합합니다. 각 일치 항목을 자체 줄에 인쇄합니다.

grep -E -o '[[:alpha:]]{2,}' file.txt

소문자를 원하시면

grep -E -o '[[:alpha:]]{2,}' file.txt | tr '[:upper:]' '[:lower:]'

grep regex는 이중 대괄호를 사용하지만 tr은 그렇지 않습니다. 이는 정규식의 문자 클래스를 대괄호로 묶어야 하는 반면 tr은 정규식을 사용하지 않고 문자 세트를 사용하기 때문입니다.

답변2

노력하다:

cat file.txt | tr [[:upper:]] [[:lower:]] | tr '\n' ' ' | sed -E 's/[ \t]+/\n/g'

tr -d '\n'공백을 제거하여 모든 단어를 연결합니다 . 위의 tr '\n' ' '간격을 유지하십시오 .

그런 다음 간격을 공백으로 변환해야 하며, 위의 sed가 수행합니다. 여러 공백(또는 탭)을 [ \t]+개행 문자로 변환합니다 \n.

답변3

제목 질문에 답하십시오.

이 명령은 파일을 가져와 각 단어를 분리하여 한 줄에 표시합니다.

다음을 수행할 수 있습니다.

<file tr '\n\t\r' ' '' '' ' | tr -s ' ' '\n'   # needs three spaces !

줄 바꿈, 탭 및 캐리지 리턴을 공백으로 변환한 다음...
연속된 -s공백( )을 다시 변환합니다.하나새로운 팀.

tr 명령을 활용하여 동일한 호출에서 대문자를 소문자로 변환하는 데 사용할 수 있습니다.

<file tr '[:upper:]\n\t\r' '[:lower:]   ' | tr -s ' ' '\n'

또는 GNU sed에서 똑같은 작업을 수행할 수 있습니다(이렇게 하면 전체 파일이 메모리에 저장되고 파일 내에 NUL 바이트가 없다고 가정합니다).

<file sed -zE -e 'y/A-Z\n\t\r/a-z   /;s/ +/\n/g'

그런 다음 텍스트의 질문에 답하십시오.

(단어는 연속된 문자 시퀀스로 정의되므로 한 글자로 된 단어는 포함되지 않습니다.) 모든 빈 줄을 제거합니다.

a-z 이외의 문자가 포함된 단어, 한 문자 단어, 빈 줄을 제거할 수 있습니다.

sed -E '/[^a-z]/d;/^.$/d;/^$/d'

좀 더 난해한 것으로 단순화할 수 있습니다.

sed -E '/[^a-z]/d;/^(.|)$/d'

한 줄에 모두 입력하거나 다음을 수행합니다.

<file tr '[:upper:]\n\t\r' '[:lower:]   ' | tr -s ' ' '\n' | sed -E '/[^a-z]/d;/^(.|)$/d'

또는:

<file sed -zE -e 'y/A-Z\n\t\r/a-z   /;s/ +/\n/g' | sed -E '/[^a-z]/d;/^(.|)$/d'

주석이 달린 버전(GNU sed용):

# Source `file` and use sed with the `zero` option (-z) and Extended Regex (ERE `-E`)
<file sed -zE -e '
    # Transliterate (-y) UPPER to lower and convert control to space.
y/A-Z\n\t\r/a-z   /
    # Restore consecutive spaces to **one** newline.
s/ +/\n/g
    # Second call to sed.
' | sed -E '
    # Delete (d) lines that have nay character not in the range a-z.
/[^a-z]/d
    # delete any line with one character or empty.
/^(.|)$/d
'

답변4

$ echo '  HTE ONTE NOTEH ONTEH E E O  AOE  ' | perl -pe '$_ =~ s/\b\w\b//g; $_ =~ s/\W*(\w+)\W*/\L$1\n/g'
hte
onte
noteh
onteh
aoe

이는 Perl을 사용하여 먼저 입력에서 단일 문자 단어를 제거한 다음 나머지 각 단어를 추출하고 소문자로 만들고, 단어가 아닌 문자를 제거하고 각 단어를 자체 줄에 배치합니다.

관련 정보