在 bash/ash 中提取字符串的开头字母

Dee*_*shi 4 awk cut sed ash

如何从字符串中提取开头字母?我想在遇到第一个非字母字符之前提取开头出现的字母。

例如,如果输入字符串是abcd045tj56,则输出应该是abcd

同样,如果输入是jkl657890,则输出应该是jkl

可以使用 awk/sed/cut 在 shell 脚本中完成吗?

我试过

echo "XYZ123" | awk 'sub(/[[:alpha:]]*/, "")'
Run Code Online (Sandbox Code Playgroud)

但它给出的是 123 而不是 xyz

然后我尝试了

echo "XYZ123" | awk '{print (/[[:alpha:]]*/)}'
Run Code Online (Sandbox Code Playgroud)

但它给出了 1

我希望答案是 XYZ

Rav*_*h13 5

将我的评论转换为此处的答案。使用任何awk版本。

awk '
match($0,/^[a-zA-Z]+/){
  print substr($0,RSTART,RLENGTH)
}
' Input_file
Run Code Online (Sandbox Code Playgroud)

或者:

awk '
match($0, /[^[:alpha:]]/){
  print substr($0, 1, RSTART-1)
}
' Input_file
Run Code Online (Sandbox Code Playgroud)