shell提取文本内容

shell提取文本内容这是个记录软件UID的文本,路径为/data/system/appops.xml,用shell命令怎么提取这个文件里的红线画的包名下面的10133,将这段命令提取出红线画的10133后赋值给UID,也就是 UID=提取命令

文件中的关键字段如下

<pkg n="com.tencent.tmgp.cf">
<uid n="10133" p="false">
<op n="0" />
<op n="1" t="1476021659698" />
<op n="10" t="1476022403423" />
<op n="23" t="1476022403246" />
<op n="24" m="1" />
<op n="32" t="1475723820485" />
<op n="40" t="1476022517159" d="27208" />
</uid>
</pkg>

看你的文本这个文件里面应该有好几个uid,如果你只需要10133,那直接赋值给UID就可以了
如果是根据tencent来匹配的话,可以这样
UID=`cat /data/system/appops.xml | grep -A 1 tencent | grep uid | awk -F\" '{print $2}'`追问

这种UID是可以变化的,删除软件,再安装又会是另一个UID,我只想获取这个软件的UID

UID=`cat /data/system/appops.xml | grep -A 1 com.tencent.tmgp.cf | grep uid | awk -F\" '{print $2}'`
echo "$UID" > /1.txt

改进了一下

追答

对的,这样就可以了

追问

可我没看懂你这命令,你先捕获tencent后一行,然后捕获uid,输出第二个字符,这里没有提到要捕获10133啊

追答

是的,显示搜索匹配tencent,然后列出他的下一行内容,然后把下一行单独grep出来,然后根据双引号进行分割,把第二列的数值抓取出来,这里面就是10133,如果说你已经知道你要的uid是10133,那你还写那么复杂干嘛,直接UID=10133就可以了。

追问

不是我要那么复杂,是我卸载这个软件,再安装个新版本,这个UID数值就会变化,我直接用抓取的方法,不管怎么变,都可以抓取到它的UID

温馨提示:内容为网友见解,仅供参考
无其他回答

shell如何取出特定文本内容并替换另一个文本中的指定内容???
1、按=分割取第二列 cat $file1|grep mqserver|awk -F= '{print $2}'`2、直接替换文件内容 sed -i "s\/127.0.0.1\/192.168.1.1\/" file1 3、实例:!\/bin\/sh file1=ip1.txt file2=ip2.txt IP1=`cat $file1|grep mqserver|awk -F= '{print $2}'`IP2=`cat $file2|grep...

利用shell脚本如何提取一个文件中某一特定行和下面若干行的内容
3、sed-n'开始行,结束行p'data.txt;显示文件X行到Y行的内容:命令:sed-n'10,18p'data.txt。4、head\/tail用法。tail用法:tail经常用来查看文件末尾的数据,在shell中可以获取文本中指定数据行。tail-n-3data.txt获取文件最好3行数据。tail-n+3data.txt获取文件3到最后一行数据。5、head用法...

用shell提取txt文本中的前4个字母,赋值到另一个变量
var=`head -n 2 1.txt| tail -n 1 | cut -c 1-4`echo $var 这里的`通常在大键盘数字1的左边,思路:取1.txt前两行,即第一个|得到的是1.txt前两行的文本,tail -n 1是取前两行的最后一行,也就是第二行的文本。cut -c 1-4是截取第一到第四个字符。上面的2你可以改成自己的...

shell 如何取本本文件中 指定两个字符中间的内容呢?
echo '< server ip="123.321.345.543" \/>'|sed 's\/.*<[ ]*server ip="\/\/g;s\/"[ ]*\\\/>.*\/\/g'把echo命令的输出改成你的文本名,如cat test.txt,之后把结果赋值给newip变量,如newip=

shell 如何取文本中 指定两个字符中间的内容
sed -nr '\/TABLE\/{s\/.*"bank"\\.(.+) row.*\/\\1\/;p}' yourfile或者:awk -F. '\/TABLE\/{split($2,a," ");print a[1]}' yourfile结果都是:cpdmdyb_ck cpdmdyb_dk

shell脚本提取文档中的一个多位数,加一,返回
grep的-E选项表示使用扩展的正则表达式,-o表示仅提取正则匹配的内容,而不是返回整行内容。awk 'BEGIN{FS="=";OFS="="} NR==267{$3+=1;print}' data.mk 也可以,awk相当于一门小型语言,里面的语法类似C语法,支持直接做运算,还有一些内置函数。所以如果在文本处理的同时涉及运算的话,用awk...

shell提取文本内容
看你的文本这个文件里面应该有好几个uid,如果你只需要10133,那直接赋值给UID就可以了 如果是根据tencent来匹配的话,可以这样 UID=`cat \/data\/system\/appops.xml | grep -A 1 tencent | grep uid | awk -F\\" '{print $2}'`

Lunix下,用shell脚本提取两个文本中的数字,并进行排序,生成新的文档...
name1.txt | sort > new.txt PS:其中name.txt是你的文件名,new.txt是新生成的文档。这个命令会把源文档中所有数字摘出来然后排序。同事处理两个文档的话sed没试过,不过你可以再加两行代码如下:sed -e 's\/[^0-9]\/\\n\/g' name2.txt | sort >> new.txt sort new.txt >final.txt ...

shell 如何提取出文本中的字符串作为变量使用
for user in `awk -F: '\/\\\/bin\\\/bash$\/{print $1}' \/etc\/passwd`do echo "$user" #使用字符串变量 user 就行了doneawk里本身就具有grep的功能,合并一下。

linux shell 如何把txt文本中每一行提取出来赋值给一变量,再输出这一变...
利用sed命令和while语句 x=sed -n "$n p" 123.txt (x为变量n 为要读取的某一行)

相似回答