通过shell,获取xml中包含path="LINUX/android/行中name=得值
时间: 2024-01-23 18:04:14 浏览: 27
可以使用`grep`和`sed`命令来实现,具体如下:
假设我们有一个名为`example.xml`的XML文件,其中包含多个`<node>`节点,每个节点中有`path`和`name`两个属性,我们需要获取`path`属性为`LINUX/android/`且`name`属性为`得值`的节点。
可以使用以下命令:
```
grep -E '<node.*path="LINUX/android/".*name="得值"' example.xml | sed -E 's/^.*<node/<node/' | sed -E 's/\/>$//'
```
解释一下:
- `grep -E '<node.*path="LINUX/android/".*name="得值"' example.xml`:使用正则表达式匹配符合条件的行。
- `sed -E 's/^.*<node/<node/'`:去掉匹配行前面的内容,只留下`<node>`开头的部分。
- `sed -E 's/\/>$//'`:去掉匹配行末尾的`/>`,只留下`<node>`标签的内容。
执行以上命令后,将输出符合条件的`<node>`节点。
相关问题
在配置文件中配置hive.user.aux.jars.path对hive shell生效吗?
是的,将 `hive.user.aux.jars.path` 配置添加到 Hive 的配置文件中,可以让该配置对所有 Hive shell 用户生效。Hive 的配置文件通常是 `hive-site.xml`,该文件位于 `$HIVE_HOME/conf/` 目录下。可以使用文本编辑器打开该文件,找到 `<configuration>` 标签,然后在其中添加如下配置:
```xml
<property>
<name>hive.user.aux.jars.path</name>
<value>/path/to/your/jar/files</value>
</property>
```
其中,`/path/to/your/jar/files` 指定了用户自定义的 jar 包所在的路径。需要注意的是,如果 Hive 服务器正在运行,需要重启 Hive 服务才能使新的配置生效。
shell 获取文件夹下所有子文件夹下所有文件的名称 如果子文件夹以anim开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.anim. 中间:文件名称 结尾:" /> 如果子文件夹以drawable开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.drawable. 中间:文件名称 结尾:" /> 如果子文件夹以layout开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.layout. 中间:文件名称 结尾:" /> 如果子文件夹以mipmap开头,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.mipmap. 中间:文件名称 结尾:" /> 如果子文件夹以values开头,并且文件名为dimens.xml,则生成的字符串规则为: 开头:<path value="com.youxiang.soyoungapp.R.dimen. 中间:获取dimens.xml中name对应的value 结尾:" /> 每生成一个字符串,换行再生成下一个字符串 以上字符串聚合去重保存一个txt中
你可以使用以下的Shell脚本来完成这个任务:
```shell
#!/bin/bash
# 设置需要搜索的文件夹路径
dir_path="/path/to/folder"
# 遍历文件夹及其子文件夹下的所有文件
for file_path in $(find "$dir_path" -type f); do
# 获取文件名和所在文件夹的名称
file_name=$(basename "$file_path")
dir_name=$(basename "$(dirname "$file_path")")
# 根据文件夹名称生成字符串
if [[ "$dir_name" == "anim"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.anim.$file_name\" />"
elif [[ "$dir_name" == "drawable"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.drawable.$file_name\" />"
elif [[ "$dir_name" == "layout"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.layout.$file_name\" />"
elif [[ "$dir_name" == "mipmap"* ]]; then
string="<path value=\"com.youxiang.soyoungapp.R.mipmap.$file_name\" />"
elif [[ "$dir_name" == "values"* ]] && [[ "$file_name" == "dimens.xml" ]]; then
# 从dimens.xml中提取name和value
while read -r line; do
if [[ $line =~ ^[[:space:]]*<dimen[[:space:]]+name=\"([^"]+)\"[[:space:]]+[^>]*>(.*)</dimen> ]]; then
dimen_name="${BASH_REMATCH[1]}"
dimen_value="${BASH_REMATCH[2]}"
string="<path value=\"com.youxiang.soyoungapp.R.dimen.$dimen_name\">$dimen_value</path>"
break
fi
done < "$file_path"
else
# 跳过其他文件夹和未知文件
continue
fi
# 将字符串添加到结果中
result+="$string\n"
done
# 对结果去重并保存到文件
echo -e "$result" | sort -u > output.txt
```
你只需要将其中的`/path/to/folder`替换成你的文件夹路径,运行该脚本即可生成一个名为`output.txt`的文件,其中包含了所有符合要求的字符串,并且已经去重。