使用shell语言,编写一段脚本,按照以下要求 并将数据写入txt文本 SML_SET_DUM(524288, 1, dum) pat P_MREG_PRAM_LOAD_UBM,Q1/Q2 = 524288/0->524289/0 pat P_MREG_PRAM_READ_ONE_WKRD_2,Q1/Q2 = 0/0->524212/4 SML_GET_DUM(0, 4, dum) 将第一行的524288 和 1 使用正则取出来 将第二行的 P_MREG_PRAM_LOAD_UBM 和 524288 0 524289 0 使用正则取出来 第三行的的 P_MREG_PRAM_READ_ONE_WKRD_2 和0 0 524212 4 使用正则取出来 第四行的 0 4 使用正则取出来
时间: 2023-12-10 22:05:48 浏览: 63
shell脚本的编写
可以使用以下的脚本来实现:
```
#!/bin/bash
# 定义要处理的字符串
str="SML_SET_DUM(524288, 1, dum)
pat P_MREG_PRAM_LOAD_UBM,Q1/Q2 = 524288/0->524289/0
pat P_MREG_PRAM_READ_ONE_WKRD_2,Q1/Q2 = 0/0->524212/4
SML_GET_DUM(0, 4, dum)"
# 处理第一行
regex1="SML_SET_DUM\((\d+), (\d+), dum\)"
if [[ $str =~ $regex1 ]]; then
num1=${BASH_REMATCH[1]}
num2=${BASH_REMATCH[2]}
echo "$num1 $num2" >> data.txt
fi
# 处理第二行
regex2="pat\s+(P_MREG_PRAM_LOAD_UBM),Q1/Q2\s+=\s+(\d+)/(\d+)->(\d+)/(\d+)"
if [[ $str =~ $regex2 ]]; then
name=${BASH_REMATCH[1]}
num1=${BASH_REMATCH[2]}
num2=${BASH_REMATCH[3]}
num3=${BASH_REMATCH[4]}
num4=${BASH_REMATCH[5]}
echo "$name $num1 $num2 $num3 $num4" >> data.txt
fi
# 处理第三行
regex3="pat\s+(P_MREG_PRAM_READ_ONE_WKRD_2),Q1/Q2\s+=\s+(\d+)/(\d+)->(\d+)/(\d+)"
if [[ $str =~ $regex3 ]]; then
name=${BASH_REMATCH[1]}
num1=${BASH_REMATCH[2]}
num2=${BASH_REMATCH[3]}
num3=${BASH_REMATCH[4]}
echo "$name $num1 $num2 $num3" >> data.txt
fi
# 处理第四行
regex4="SML_GET_DUM\((\d+), (\d+), dum\)"
if [[ $str =~ $regex4 ]]; then
num1=${BASH_REMATCH[1]}
num2=${BASH_REMATCH[2]}
echo "$num1 $num2" >> data.txt
fi
```
这个脚本首先定义了要处理的字符串,然后使用正则表达式分别取出每行中需要的部分,并将结果写入到 `data.txt` 文件中。注意,这里使用了 Bash 的正则表达式匹配功能,需要将脚本保存为 .sh 文件,并在终端中使用 `bash script.sh` 命令来运行。
阅读全文