Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在bash中选择字母数字字符串中的单个字符_Regex_String_Bash_Awk_Sed - Fatal编程技术网

Regex 在bash中选择字母数字字符串中的单个字符

Regex 在bash中选择字母数字字符串中的单个字符,regex,string,bash,awk,sed,Regex,String,Bash,Awk,Sed,我对bash中的字符串操作有问题。我有一个名字列表,每个名字由两部分组成,字符和数字:例如 abcdef01234 在本例中,我希望在数字部分开始之前剪切最后一个字符 f 我想有一个正则表达式可以帮我解决这个问题,但就是想不出来。AWK/sed解决方案也被接受。希望有人能帮忙。 谢谢。您可以使用类似于[a-zA-Z]+([a-zA-Z])[0-9]+的regexp。如果您知道如何使用sed,这是非常简单的 选中匹配的将是您想要的字母 ^\w+([a-zA-Z])\d+$ 作为sed命令(在

我对bash中的字符串操作有问题。我有一个名字列表,每个名字由两部分组成,字符和数字:例如

abcdef01234
在本例中,我希望在数字部分开始之前剪切最后一个字符

f
我想有一个正则表达式可以帮我解决这个问题,但就是想不出来。AWK/sed解决方案也被接受。希望有人能帮忙。
谢谢。

您可以使用类似于
[a-zA-Z]+([a-zA-Z])[0-9]+
的regexp。如果您知道如何使用
sed
,这是非常简单的


选中

匹配的将是您想要的字母

^\w+([a-zA-Z])\d+$
作为
sed
命令(在OSX上),这将是:

echo "abcdef12345" | sed -E "s#^[a-zA-Z]+([a-zA-Z])[0-9]+\$#\1#"

在bash中,可以通过删除子字符串和字符串索引进行参数扩展,例如


输出:
f

再次尝试以下操作

echo "abcdef01234" | awk '{match($0,/[a-zA-Z]+/);print substr($0,RLENGTH,1)}'
我有一个名字列表,我假设是一个文件,
file
。使用
grep
的PCRE和(正向)前瞻:

$ grep -oP "[a-z](?=[^a-z])" file
f

它打印出第一个(小写)字母,然后是一个非(小写)字母。

可能重复欢迎使用堆栈溢出,请将示例输入文件和带有代码标记的预期输出示例也发布到您的帖子中,以便我们可以在同一方面帮助您。感谢您的反馈,这是我的第一篇帖子,所以我不太熟悉问题的格式。不管怎么说,我的问题已经解决了,下面所有的答案似乎都有效。谢谢大家:)
$ grep -oP "[a-z](?=[^a-z])" file
f