Bash

刪除所有字元直到第一個字母 (a-zA-Z一個−和一個−從a-zA-Z) 在一個字元串中

  • March 1, 2022

我想刪除所有字元,直到[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 語言環境之外,未指定匹配的內容。在實踐中,它是相當隨機的,尤其是對於bashshell

[[:alpha:]]匹配區域設置中被視為字母的所有字元(或更一般地,即使在非字母腳本中,通常也是人類語言單詞轉錄的一部分的字元)。無論語言環境如何,要僅匹配 ASCII 英文字母,您可以使用[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ].

引用自:https://unix.stackexchange.com/questions/692462