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