文字列から最初の文字([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(ありがとう。こんにちは)

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'

関連情報