shell脚本交互,搜索xml文件中关键字,并列出来
时间: 2023-07-20 16:08:00 浏览: 150
可以使用 `grep` 命令来搜索 XML 文件中的关键字,再使用 `awk` 命令来格式化输出。下面是一个示例脚本:
```bash
#!/bin/bash
# 提示用户输入关键字
read -p "请输入要搜索的关键字: " keyword
# 搜索 XML 文件中包含关键字的行,并使用 awk 格式化输出
grep -in "$keyword" file.xml | awk -F: '{ printf("文件 %s 中的第 %d 行包含关键字 \"%s\":\n%s\n\n", $1, $2, keyword, $0) }' keyword="$keyword"
```
其中:
- `read -p` 命令用于提示用户输入关键字,并将输入保存在 `keyword` 变量中。
- `grep -in` 命令用于搜索 `file.xml` 文件中包含关键字的行。其中 `-i` 参数表示忽略大小写,`-n` 参数表示输出行号。
- `awk -F:` 命令用于以 `:` 作为分隔符,将每行输出按照文件名和行号进行格式化。`$1` 表示文件名,`$2` 表示行号,`$0` 表示整行内容。
- `printf` 命令用于输出格式化的结果。`%s` 表示字符串,`%d` 表示整数,`\n` 表示换行符。`keyword="$keyword"` 表示将用户输入的关键字传递给 `awk` 命令。
注意,在实际使用时需要将 `file.xml` 替换为要搜索的 XML 文件名。
相关问题
shell脚本监控文件中是否包含关键字
在shell脚本中,你可以使用`grep`命令来监控文件中是否包含特定的关键字。`grep`是一个强大的文本搜索工具,可以搜索文件内容并返回匹配的结果。以下是基本步骤:
1. 首先,你需要打开shell脚本文件,例如使用`echo`或`cat`查看或编辑脚本。
2. 使用`grep`命令的基本语法如下:
```bash
grep -q "关键字" 文件名 > /dev/null
```
`-q`选项表示安静模式,只检查是否存在匹配而不会打印结果。如果存在匹配,则命令返回0(成功),否则返回非零值(失败)。
3. 如果你想在文件内容有改变时触发某个动作,如发送通知,你可以结合`inotifywait`(Linux系统)或`fswatch`(跨平台)工具,它们可以在文件发生变化时执行指定的脚本。
```bash
inotifywait -r -e modify file.txt | while read path action file; do
if [[ "$action" == "modify" ]]; then
grep -q "关键字" "$file"
# 根据grep的返回状态做后续处理
fi
done
```
或者
```bash
fswatch -o file.txt |
while IFS= read -r line; do
if [[ $line =~ "modified:" ]]; then
grep -q "关键字" file.txt
# ...
fi
done
```
使用SHELL脚本读取XML文件,交互式输出关键字后,输出关键字所在xml文件中的行数和关键字
可以使用`grep`命令来搜索关键字,并通过`awk`命令输出所在行数和关键字。
以下是一个简单的交互式脚本:
```shell
#!/bin/bash
# 读取xml文件路径
read -p "请输入xml文件路径:" xml_file
# 读取关键字
read -p "请输入关键字:" keyword
# 搜索关键字,并输出所在行数和关键字
grep -n "$keyword" "$xml_file" | awk -F ':' '{print "行数:" $1 ", 关键字:" $2}'
```
使用示例:
```shell
请输入xml文件路径:test.xml
请输入关键字:<name>
行数:2, 关键字:<name>John</name>
行数:7, 关键字:<name>Jane</name>
```
说明:
- `grep -n`命令可以搜索关键字并输出所在行数。
- `awk -F ':'`命令可以按照冒号分隔符将每一行分成两部分,即行数和关键字。
- `$1`和`$2`分别表示第一部分和第二部分。
阅读全文
相关推荐











