求助Linux下带特殊字符的字符串查找方法!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助Linux下带特殊字符的字符串查找方法!相关的知识,希望对你有一定的参考价值。

求助在:aaa/fzl/\u963f\u72f8$ A
这样的字符串中,通过aaa/fzl/\u963f\u72f8$ 查找后面对应的字母A的grep方法!因为带$ \这样的特殊符号,好像直接用grep语句不行,请高手帮忙!谢谢

  查找目录下的所有文件中是否含有某个字符串
  find .|xargs grep -ri "IBM"
  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
  find .|xargs grep -ri "IBM" -l
  推荐使用正则表达式
  (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。
  (2)基本元字符集及其含义
  ^ :只匹配行首。 如^a 匹配以a开头的行abc,a2e,a12,aaa,......
  $ :只匹配行尾。 如^a 匹配以a结尾的行bca,12a,aaa,.......
  * :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,....
  [] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345]
  \ :只用来屏蔽一个元字符的特殊含义。 如\*,\',\",\|,\+,\^,\. 等
  .:(点)只匹配任意单字符。
  pattern\n\:只用来匹配前面pattern出现的次数.n为次数。如a\2\匹配aa.
  pattern\n,\:含义同上,但次数最少为n.如a\2,\匹配aa,aaa,aaaa,.....
  pattern\n,m\:含义同上,但次数在n和m之间。如a\2,4\匹配aa,aaa,aaaa三个
  (3)举例说明:
  ^$ :匹配空行
  ^.$ :匹配包含一个字符的行
  \*\.pas :匹配以*.pas结尾的所有字符或文件
  [0123456789]或[0-9] :假定要匹配任意一个数字
  [a-z] :任意小写字母
  [A-Za-z] :任意大小写字母
  [S,s] :匹配大小写S
  [0-9]\3\\.[0-9]\3\\.[0-9]\3\\.[0-9]\3\ :匹配IP地址 [0-9]\3\三个0-9组成的字符串;\. :匹配点(注意这里点是特殊的字符,所以要用"\"来屏蔽其含义)
参考技术A 可以试试 \ 转义符

例子:
需求:要在test.log中匹配"respCode":"00",注意这里面包含"特殊符号,不包含:
只要输入以下指令即可
grep '\"respCode\":\"00\"' test.log
参考技术B #include <stdio.h>
#include <stdlib.h>
#include <string.h>
//三个头文件,分别表示标准化io,标准化库文件,字符串类文件的头文件

int main()

int line=0;//记录行数
FILE *fp;//定义文件指针
char FILENAME[100],li[256],indata[255],*sust=NULL;//
printf("Input file name please:");
gets(FILENAME);//获取文件名
if ((fp=fopen(FILENAME,"r"))!=NULL)//如果读取成功,即fopen函数返回值不为空
printf("Input a string please:");
gets(indata);//输入要寻找的那个字符串
while (!feof(fp))//当文件未结束一直执行该操作

line++;//行计数加一
fgets(li,255,fp);//读取255个字符
sust=strstr(li,indata);//从字符串li中寻找indata第一次出现的位置(不比较结束符NULL)。参看//
if (sust!=NULL) //如果未找到
printf("Found it in line %d\n",line);


fclose(fp);//关闭文件

else puts("File not found!");//文件未找到
return 0;
参考技术C 1. 试试用"\"进行转义:
grep "aaa\/fz\|\\u963f\\u72f8\$" yourfile
2. 试试用awk,这个忘了是否需要转义,你自己试试:
awk 'if($1="aaa/fzl/\u963f\u72f8$") print'本回答被提问者采纳

Linux:正则表达式及:grep工具

  1. 什么是正则表达式:

    正则表达式就是处理字符串的方法,他是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易达到查找,删除,替换某种特定字符串的处理程序,其实就像相当与添加位置限定符,数量限定符,字符想定符来进行范围缩减匹配。


2.grep工具:

   首先grep就是一个查找工具,然后通过正则表达式完成字符串的搜索。

   存在3种限定符:

首先是字符限定符:

技术分享

数量限定符:

技术分享

技术分享

位置限定符:

技术分享

其他限定符:

技术分享

是grep正则表达式的Extended规范,Basic规范也有这些语法,只是字符?+{}|()应

解释为普通字符,要表示上述特殊含义则需要加\转义。如果用grep而不是egrep,并且不加-E

参数,则应该遵照Basic规范来写正则表达式。 (一定要注意!!!!!)


下面我们主要来说一下grep的各种选项,并结合上以上的各种限定符来使用一下:

常用的grep选项有:
-c 只输出匹配行的计数。
-i 不区分大小写(只适用于单字符)。
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n 显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。


一个一个来:

首先我们在终端下输入命令:count=0;while [ $count -le 100 ];do echo "hello abc $count">>file;let count++;done 


创建一个100行的file文件:

-c:只输出匹配行的计数。

技术分享

-------------------------------------------------------------------------------------------


-i:不区分大小写(只适用于单字符)。

使用这个之前我们使用sed工具对file文件进行转换:sed工具以后会写博文。

sed -i /he/s/he/HE/g file

表示我们把每一行的he都转换成了HE

然后我们使用grep -i;

技术分享

-------------------------------------------------------------------------------------------


-h 查询多文件时不显示文件名。

技术分享

-------------------------------------------------------------------------------------------


-n 显示匹配行及行号。

技术分享

-------------------------------------------------------------------------------------------


-s 不显示不存在或无匹配文本的错误信息。

技术分享

-------------------------------------------------------------------------------------------


-v 显示不包含匹配文本的所有行。

技术分享

-------------------------------------------------------------------------------------------

-l 查询多文件时只输出包含匹配字符的文件名。

技术分享


常用的就这些了=。=

本文出自 “剩蛋君” 博客,请务必保留此出处http://memory73.blog.51cto.com/10530560/1792687

以上是关于求助Linux下带特殊字符的字符串查找方法!的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux下查找文件内容包含某个特定字符串的文件

求助sql数据库字段特殊字符问题

asp 查找过滤中文字符串

lua正则分割字符串求助

linux 通配符元字符和特殊字符

Linux系统下,在文件中查找某个字符串