在 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 部分。
我尝试获取 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 部分。