在 bash 中的子字符串之前获取字符

Get char before Substring in bash

我尝试获取 bash 中子字符串之前的字符。 字符串的一些示例:

label="LLL:EXT:xxx/Resources/Private/Language/locallang.xlf:flux.content"

或:

label='LLL:EXT:xxx/Resources/Private/Language/locallang.xlf:flux.content'

或:

$this->getLanguageService()->sL('LLL:EXT:xxx/Resources/Private/Language/locallang.xlf:flux.content'

我需要知道 LLL 之前是否有单引号或双引号。 :)

您可以为此使用 grep。

grep -E -o '.{0,1}LLL' file
grep -E -o '.{0,1}LLL' file | cut -c-1 # shows only the first character
  • -E表示模式是一个扩展的正则表达式
  • -o 只显示匹配的部分
  • '.{0,1}LLL' 指定附加第一个前置字符的模式

你问的是LLL前是否有'"。最短的答案是 grep -q "['\"]LLL".

如果退出代码为0,则答案为是,如果退出代码为1,则答案为否。

例如:

$ echo 'label="LLL:EXT:xxx/Resources/Private/Language/locallang.xlf:flux.content"' | grep -q "['\"]LLL"
$ echo $?
0
$ echo test | grep -q "['\"]LLL"
$ echo $?
1

您可以使用纯 Bash 代码获取字符:

[[ $string =~ (.)LLL ]] && char=${BASH_REMATCH[1]}

参见 [[...]] and BASH_REMATCH in the Bash Reference Manual 部分。