大家好,这是我在 Bash 中遇到的问题, 我试图找到第二次出现的字符,特别是“_”,一旦找到它,就会删除该字符及其右侧的任何其他字符。这是可视化效果:
String: foo_bar_v20.9_FUBAR
Output : foo_bar
主要问题是我找不到找到第二个“_”的最佳方法,一旦找到,我应该使用它的位置来做这样的事情:
echo $editedString | cut -c 2ndUnderlineLocation- | rev
-克里斯
最佳答案
使用正则表达式:
$ string="foo_bar_v20.9_FUBAR"
$ [[ $string =~ ([^_]*_[^_]*)_ ]]
$ echo ${BASH_REMATCH[1]} # First capture group
foo_bar
捕获组捕获第一个 _
之前的所有非 _
字符,即
第一个 _
以及下一个 _
之前的所有非 _
字符。
(还有一个符合 POSIX 标准的怪物......
echo ${string%_${string#${string%%_*}_*_}}
但除非绝对必要,否则最好避免这样做。它看起来很糟糕,但您可以按照如下步骤逐步构建它:
# What appears just before the first _?
$ x=${string%%_*}
$ echo $x
foo
# Use that as a prefix to remove, along with everything up to the next _
$ y=${string#${x}_*_}
$ echo $y
v20.9_FUBAR
# Remove *that* as a suffix
$ echo ${string%_${y}}
foo_bar
)
关于linux - Bash 找到字符并删除右侧的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767145/