[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'