sed를 사용하여 특정 유형의 문자 복사

sed를 사용하여 특정 유형의 문자 복사

sed(또는 sed가 기능을 지원하지 않는 경우 grep)를 사용하여 텍스트 파일의 특정 줄에 문자, 점(.), 공백 및 숫자만 복사하고 sed 출력을 var로 보내는 방법을 찾고 있습니다. 부분 텍스트를 삭제하고 싶지 않습니다.

sed가 텍스트 파일의 지정된 줄만 읽고 az, AZ, 0-9 문자 및 "." 기호만 복사하기를 원합니다.

몇 가지 웹 페이지와 SED의 GNU 매뉴얼 페이지를 탐색하면 다음과 같습니다. https://www.gnu.org/software/sed/manual/sed.html

다음 명령을 사용하여 수행하려고 합니다.

NAME1=$(sed -n '1p' -e 's/.*\[:alpha:digit:blank:punct:]/`\1/p`' txtfile)

하지만 실제로는 지워지지 않은 오류 메시지가 나타납니다.

test.sh: 1: [: sed: unexpected operator

-nsed 명령에서 여러 유형의 "문자 클래스 및 대괄호 표현식"을 표시하는 방법을 기억하지 못하고 옵션 위치를 사용하여 sed가 작업해야 하는 텍스트 줄을 표시하는지 잘 모르겠습니다 .

매개변수/옵션을 사용하여 \1/p일치하는 패턴(sed가 무언가를 찾은 경우)이 원본 파일에 남아 있어야 한다고 sed에 지시합니다.

답변1

예를 들어 POSIX 문자 클래스와 리터럴 문자를 연결하여 문자 범위를 구성하려면 .다음과 같은 것이 필요합니다 .

[[:alpha:][:digit:].]

그리고 그것을 부정한다

[^[:alpha:][:digit:].]

따라서 모든 문자를 제거 (빈 문자로 대체)하려면와는 별개로영숫자, 십진수, 마침표:

sed 's/[^[:alpha:][:digit:].]//g' somefile

관련 정보