linux - Bash 找到字符并删除右侧的所有字符

标签 linux bash scripting

大家好,这是我在 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/

相关文章:

java -/etc/init.d 中启动时的 Unix 脚本不起作用

bash - 如何将第一个命令的输出通过管道传递到下一个命令的特定位置?

java - JSR223 : Calling Java "varargs" methods from script

linux - Linux fq_codel 中的单独流程是什么?

linux - Linux 终端中循环内的 IF 语句不起作用

linux - 从字符串中获取特定行,其中我必须获取的行号存储在变量中?

linux - 在 BASH 中的选定文本中搜索字符串/模式

linux - 在服务器端写N次时是否应该读N次

perl - 在 perl 中散列的数组

ruby-on-rails - 可以访问 Rails 模型的 Ruby 脚本