#!/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",列出关键字后修改其中的某个值
时间: 2023-07-19 15:07:13 浏览: 96
你可以使用 sed 命令来修改文件中的某个值。比如要修改 file.xml 中包含关键字的某一行中的值,可以这样做:
```
# 提示用户输入关键字和要替换的值
read -p "请输入要搜索的关键字: " keyword
read -p "请输入要替换的值: " new_value
# 搜索 XML 文件中包含关键字的行,并使用 sed 替换其中的值
grep -in "$keyword" file.xml | awk -F: '{ printf("文件 %s 中的第 %d 行包含关键字 "%s":\n%s\n\n", $1, $2, keyword, $0) }' keyword="$keyword" | while read line; do
file=$(echo "$line" | awk '{ print $2 }')
line_number=$(echo "$line" | awk '{ print $6 }')
sed -i "${line_number}s/old_value/$new_value/g" "$file"
done
```
这段脚本会提示用户输入要搜索的关键字和要替换的值,然后搜索包含关键字的行,并使用 sed 命令替换其中的值。注意将 old_value 替换为实际需要替换的值。
相关问题
shell脚本先读取xml文件,输入搜索的关键字,然后列出关键字,再根据关键字修改其中的属性值
可以使用grep命令来搜索关键字,并使用sed命令修改属性值。以下是一个简单的示例脚本:
```shell
#!/bin/bash
# 读取xml文件
xml_file="example.xml"
xml_content=$(cat "$xml_file")
# 输入搜索的关键字
echo "请输入搜索的关键字:"
read keyword
# 列出包含关键字的行,并获取属性名和属性值
lines=$(echo "$xml_content" | grep "$keyword")
echo "$lines" | while read line; do
attr_name=$(echo "$line" | sed -n 's/.* \([a-zA-Z_]*\)=".*"/\1/p')
attr_value=$(echo "$line" | sed -n 's/.* [a-zA-Z_]*="\([^"]*\)".*/\1/p')
echo "属性名:$attr_name,属性值:$attr_value"
done
# 根据关键字修改属性值
echo "请输入要修改的关键字:"
read modify_keyword
echo "请输入要修改成的属性值:"
read new_value
xml_content=$(echo "$xml_content" | sed "s/$modify_keyword=\"[^\"]*\"/$modify_keyword=\"$new_value\"/g")
# 将修改后的xml内容写回文件
echo "$xml_content" > "$xml_file"
```
这个脚本首先读取指定的xml文件,并要求用户输入要搜索的关键字。然后,它使用grep命令列出包含关键字的行,并使用sed命令提取属性名和属性值。接下来,它要求用户输入要修改的关键字和要修改成的属性值,并使用sed命令修改相应的行。最后,它将修改后的xml内容写回文件。
使用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`分别表示第一部分和第二部分。
阅读全文