sh脚本提取#define DEFAULT_OSD_LANGUAGE HI_MW_LANG_ENGLISH中最后一个‘_’后的字符
时间: 2024-11-25 12:14:11 浏览: 3
在shell脚本中,如果你想要从像`#define DEFAULT_OSD_LANGUAGE HI_MW_LANG_ENGLISH`这样的行中提取最后一个`_`之后的字符(在这种情况下是`ENGLISH`),可以使用变量替换和切片技术。首先,我们可以将整个行赋值给一个变量,然后通过字符串操作来分割并获取最后一部分。
这里有一个简单的步骤:
1. 先读取包含该行的文件:
```bash
read line < "${file}"
```
2. 使用`=~`操作符与正则表达式匹配,找到`_`的位置,通常它会在`HI_MW_LANG_`之后:
```bash
index=$(echo $line | grep -oP -m 1 '\bHI_MW_LANG_\K[^_]*')
```
`'\bHI_MW_LANG_'`匹配`HI_MW_LANG_`的边界,`\K`跳过前面已经匹配的内容,`[^_]*`匹配直到遇到下一个非 `_` 字符为止。
3. 最后,提取`index`位置之后的字符(假设它是最后一个`_`后的内容):
```bash
language=${line:$index}
```
这样,`language`变量就会保存到`ENGLISH`了。
相关问题
sh脚本提取#define DEFAULT_OSD_LANGUAGE HI_MW_LANG_ENGLISH中的ENGLISH
这个shell脚本片段看起来是在一个包含预处理器宏定义的文件中查找`#define DEFAULT_OSD_LANGUAGE HI_MW_LANG_ENGLISH`这一行,并尝试从中提取"ENGLISH"部分。这里的`HI_MW_LANG_ENGLISH`就是定义的关键字,而"ENGLISH"是宏实际代表的值。
在shell脚本中,通常不会直接通过简单的命令行处理这种方式获取宏定义的值,因为shell不是设计来做这种高级文本解析工作的。如果脚本语言是bash或其他支持正则表达式的shell,可能会用到`grep`和`cut`之类的工具结合正则表达式来进行匹配和提取。
例如,下面是一个简化的示例,使用`grep`找到行并用`= *`作为分隔符提取右侧的值:
```sh
value=$(grep '#define DEFAULT_OSD_LANGUAGE HI_MW_LANG_' ${file} | awk -F'= *' '{print $2}')
```
这里假设`${file}`是包含定义的文件名。然而,由于原始命令中没有使用`awk`而是`grep`和`awk`组合,实际提取过程可能更复杂。
阅读全文