Bash: 특수 문자 무시

Bash: 특수 문자 무시

이 코드가 있습니다

 cat SomeFile | tr -cs '[:alnum:]' '\n' |tr -d 0-9 | tr '[:upper:]' '[:lower:]' > net.txt

파일을 읽고 이러한 문자를 무시하고 싶습니다. 웹사이트가 아닌 이상 출력은 한 줄에 한 단어입니다.

 \'#$%.,:;?!&*|()[]"<>=-

cat과 tr만 사용하여 이 작업을 어떻게 수행할 수 있나요?

출력은 다음과 같아야합니다

other
branches
examples
for
developers
http//drupalorg/project/examples
what
is
this
this
set
of

감사해요

답변1

사용할 수 있는 여러 가지 번역이 있습니다.

tr "'"'\#$%.,:;?!&*|()[]"<>=-' ' ' <SomeFile | tr -s '[:space:]' "\n"

첫 번째 작업은 원하지 않는 문자를 공백으로 변환합니다. 두 번째 작업은 모든 공백(줄 바꿈 포함)을 줄 바꿈으로 변환하여 줄 바꿈을 단일 문자로 압축합니다.

답변2

입력의 경우 SomeFile:

예: for9 Developer>http://example.org/examples?s=%20&<what>
이게 뭔가요?

다음과 같은 출력이 생성됩니다.

examples
for
developers
http://example.org/examples?s=%20&
what
is
this

나는 이것을 원한다할 수 있다tr이는 +shell을 사용하여 수행할 수 있습니다.

for i in $(<SomeFile tr -cs ']a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-' '\n' | \
    tr '[:upper:]' '[:lower:]'); do
    case "$i" in
        *://*)
            echo "$i" >> net.txt ;;
        *)
            for split in $(echo "$i" | tr -c 'a-z' '\n'); do
                echo "$split" >> net.txt
            done ;;
    esac
done

grep하지만 다음에 추가하는 것이 더 간단할 수도 있습니다 tr.

< SomeFile tr -cs ']a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-' '\n' | \
    tr '[:upper:]' '[:lower:]' | grep -o '.*://.*\|[a-z]*' > net.txt
  • 둘 다 필요하지 않습니다 cat. 파일을 표준 입력으로 지정하기만 하면 됩니다.tr

그렙:

grep -oE '[a-zA-Z]+://[]a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-]+|[[:alpha:]]+' \
    -- SomeFile | tr '[:upper:]' '[:lower:]' > net.txt

zsh배열을 사용할 수 있습니다:

file=( ${(L)=$(< SomeFile)//[^]a-zA-Z0-9\/:.%?=&_,+()~[\'#$;!*-]/ } )
printf '%s\n' ${(M)file:#*://*} ${=${file:#*://*}//[^a-z]/ }
  • 먼저 모든 URL을 인쇄한 다음 "단어"를 인쇄합니다.

관련 정보