문자열에서 첫 번째 문자([a-zA-Z])까지 모든 문자를 제거합니다.

문자열에서 첫 번째 문자([a-zA-Z])까지 모든 문자를 제거합니다.

[a-zA-Z] 문자열의 첫 글자 앞의 모든 문자를 제거하고 싶습니다 . 예를 들어:

#121Abc-->Abc

%Ab#c-->Ab#c

Ab#c-->Ab#c

Abc-->Abc

1Abc-->Abc

1 21Abc-->Abc

1^1 Abc-->Abc

참고: 알파벳이 아닌 모든 문자에는 인쇄되지 않는 문자가 포함됩니다.

bash 도구를 사용할 수 있습니까?

답변1

그리고 awk:

awk 'sub(/^[^[:alpha:]]*/, "")' infile

그리고 sed:

sed 's/^[^[:alpha:]]*//' infile

참고: 줄에 알파벳 문자가 없으면 출력에 빈 줄이 있게 됩니다. 이 줄 인쇄를 건너뛰고 입력에서 빈 줄을 건너뛰려면 다음을 사용해야 합니다.

awk 'sub(/^[^[:alpha:]]*/, "") && NF' infile
awk 'sub(/^[^[:alpha:]]*/, "") && /./' infile
sed 's/^[^[:alpha:]]*//;/./!d' infile

또는 동일한 접근 방식 grep(감사합니다.@glennjackman)

grep -o '[[:alpha:]].*' infile

답변2

입력이 쉘 변수에 있다고 가정하고 POSIX sh 매개변수 확장 연산자(원래 ksh에서 유래)를 사용하십시오.

$ string='#123Abc'
$ printf '%s\n' "${string#"${string%%[[:alpha:]]*}"}"
Abc

C 로케일을 제외 하고 [A-Za-z]일치 내용은 지정되지 않습니다. 사실 꽤 무작위인데,특히 bash껍질이 있는 것들은.

[[:alpha:]]알파벳으로 간주되는 로케일의 모든 문자(또는 더 일반적으로는 알파벳이 아닌 스크립트에서도 인간 언어의 단어 전사에 포함되는 문자)와 일치합니다. 로케일에 관계없이 ASCII 영문자만 일치시키려면 를 사용하면 됩니다 [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ].

답변3

Bash만 사용:

$ shopt -s extglob
$ a='#121Abc'
$ printf '%s\n' "${a/#*([!a-zA-Z])/}"
Abc

(등 a처리하려는 문자열을 설정합니다.)

답변4

도구는 없고 bash기능만 제공됩니다.

foo="#121Abc"
[[ "$foo" =~ ^[^a-zA-Z]* ]] && printf "%s\\n" "${foo:${#BASH_REMATCH}}"

tr당신이 말한 문자 세트의 추가를 d제거 하려면 :c

printf "%s\\n" "$foo" | tr -dc [a-zA-Z]

perl음역:

printf "%s\\n" "$foo" | perl -ple 'y/a-zA-Z//dc'

관련 정보