linux shell中字符串匹配截取IP?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell中字符串匹配截取IP?相关的知识,希望对你有一定的参考价值。

你这个可用多个方法,最简单的可用grep

s="Connections: authenticated: 10.0.115.172::56498, as admin (Full access)"
echo $s | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+::[0-9]+"
结果
10.0.115.172::56498
这个正则相关的学习,对于学习Linux来说也是非常重要的,刘老师的新书《linux就该这么学》,关于这块讲解得非常透彻,你可以翻阅查看一下。
参考技术A 可以有好几个方法
1. grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0|cut -f 2 -d=
2. ifconfig eth0|grep 'inet addr'|cut -d ":" -f2|cut -d " " -f1
3. ifconfig eth0|grep 'inet addr'|awk -F ":" 'print $2'|awk 'print $1'

linux 统计匹配字符串的行数

一个test文件夹下面有很多的.txt文件,每个.txt文件里面都有N多行的数据。

现在有一个字符串,需要分别去统计test文件夹下面的那些.txt文件中,每个文件有多少行是包含了这个字符串的。然后列出 (文件名:匹配到的行数) 的形式显示出来,如果一个文件一行都没有包含,则不需要列出这个文件。
Linux语句怎么写呢?

这是给出字符串"hi"统计目录/path/to/test. 可以把命令中的这两个参数换成你需要的.

find /path/to/test -name "*.txt" -type f -print0 | xargs -0 -n1 awk '/hi/a++ENDif(a>0)print FILENAME":" a'

追问

假如现在,我不需要(文件名:匹配到的行数)这格式了,只要输出这个文件夹下一共有多少匹配上的行,语句怎么改下呢?

追答grep hi /path/to/test/*.txt | wc -l

追问

报错 参数列表过长。 怎么办?

追答find /path/to/test -name "*.txt" -type f -print0 | xargs -0 -n1 grep hi | wc -l


你的文件数量可能有点多

参考技术A #!/bin/sh

string="abcd"

for file in `find ./ -name '*.txt' -print`
do
num=`grep $string $file | wc | awk 'print $1'`
if [ $num != 0 ]; then
echo $file $num
fi
done

参考技术B 用正则表达式
sed -n '/匹配的内容/p' 需要读取的文件 >>将匹配后的结果写入文件名

以上是关于linux shell中字符串匹配截取IP?的主要内容,如果未能解决你的问题,请参考以下文章

shell字符串截取总结

Linux的shell编程中,如何将一段字符串进行截取?

Linux shell提取字符串,文件中以a开头以z结尾的所有字符串

linux 统计匹配字符串的行数

shell脚本如何删除指定字符串,文档如下:

shell 中获取子字符串的正确姿势