如何用Bash提取字符串中最后一个点号后的子串?
Bash提取字符串最后一个点号后的子串方法
给你几个实用的Bash实现方法:
方法一:Bash参数扩展(最简洁高效)
直接利用Bash自带的参数扩展特性,不需要额外工具:
# 定义要处理的字符串数组 strings=( "word1.word2.word3.xyz" "word1.word2.word3.word4.abc" "word1.word2.mno" "word1.word2.word3.pqr" ) # 遍历数组提取内容 for str in "${strings[@]}"; do echo "${str##*.}" done
原理:${str##*.} 表示从字符串开头删除最长的匹配 *. 的部分,剩下的就是最后一个点号之后的内容。
方法二:用awk工具处理
awk适合批量处理文本行,指定点号为分隔符后输出最后一个字段:
# 直接处理多行文本 echo -e "word1.word2.word3.xyz\nword1.word2.word3.word4.abc\nword1.word2.mno\nword1.word2.word3.pqr" | awk -F '.' '{print $NF}'
原理:-F '.' 设置字段分隔符为点号,$NF 是awk的内置变量,代表当前行的最后一个字段。
方法三:用sed工具替换
通过正则替换去掉最后一个点号之前的所有内容:
echo -e "word1.word2.word3.xyz\nword1.word2.word3.word4.abc\nword1.word2.mno\nword1.word2.word3.pqr" | sed 's/.*\.//'
原理:正则表达式 .*\. 匹配从字符串开头到最后一个点号的所有字符,替换为空后就剩下目标子串。
内容的提问来源于stack exchange,提问作者Md. Masudur Rahman
相关产品推荐
相关产品推荐

