Bash
刪除所有字元直到第一個字母 (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工具可以嗎?
與
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
使用 POSIX sh 參數擴展運算符(最初來自 ksh),假設輸入在 shell 變數中:
$ string='#123Abc' $ printf '%s\n' "${string#"${string%%[[:alpha:]]*}"}" Abc
請注意,
[A-Za-z]
除了 C 語言環境之外,未指定匹配的內容。在實踐中,它是相當隨機的,尤其是對於bash
shell。
[[:alpha:]]
匹配區域設置中被視為字母的所有字元(或更一般地,即使在非字母腳本中,通常也是人類語言單詞轉錄的一部分的字元)。無論語言環境如何,要僅匹配 ASCII 英文字母,您可以使用[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
.