Regex 在bash中选择字母数字字符串中的单个字符
我对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命令(在
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