① 在linux系统如何grep过滤中,不包含某些字符
1、linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2、格式
grep[options]
3、主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\:忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。
。:所有的单个字符。
* :有字符,长度可以为0。
4、grep命令使用简单实例:
$ grep ‘test’d*
显示所有以d开头的文件中包含test的行。
$ grep ‘test’aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
② Linux中,如何将grep 搜索到的结果导入到一个文件,但要剔除没找到的项,只留找到的项。
grep 本来就是过滤命令。
你将其他命令得到的结果,比如ls -l命令得到的列表,通过管道符 | 导出到grep,后面接上要查找的关键字,再把结果通过重定向导出到文件。
就像:lsmod | grep wifi >> ~/result.txt
③ linux grep -d skip/skip/recurse 是读目录文件采取读或者跳过,我感觉这个没有用啊,用了和没用一样!
个人理解,举例子,过滤关键字'DEVICE=ens33',过滤位置/etc/* ,就是在/etc/目录下过滤出关键字'DEVICE=ens33'的行
#read读取
[root@localhost~]#grep-dread'DEVICE-ens33'/etc/*
会发现得到很多:grep: /etc/xxx: Is a directory,我给的范围是/etc/*,grep过滤字符时肯定要打开文件读取到数据吧,而我给的路径有的目录,目录怎么读取,所以读目录的时候会报错,那么我认为read是默认的模式,并且不会过滤子目录内的文件!
#recurse递归
[root@localhost~]#grep-drecurse'DEVICE=ens33'/etc/*
得到结果:/etc/sysconfig/network-scripts/ifcfg-ens33:DEVICE=ens33发现,过滤的路径不再是/etc/xxx,而是将/etc/所有的目录包括子目录都在过滤范围内了,而没有提示xxx Is a directory,可能是读取子目录时发现是目录,就进到子目录在进行过滤 [0_0]异想天开,反正,这不就是递归了嘛。
#skip跳过
[root@localhost~]#grep-dskip'DEVICE=ens33'/etc/*
#发现什么都没有,而我使用
[root@localhost~]#grep-dskip'/root:/bin/bash'/etc/*
#结果如下
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
发现了当我使用skip这个选项,只有/etc/xxx这级目录能被过滤出来,发现它并没有递归了,并且没有提示xxx Is a directory。从字面意思上看,skip,貌似是目录的话就跳过了。。。
④ linux怎样用grep过滤
不知道你是想实现什么目的,如果你是想只显示配置文件中的以 # 号开头的行版,那就使用
# grep ^# filename
如果是想显示除权 # 号开头的行的话呢,只需加个参数-v (-v 表示相反的过滤)就行了
# grep -v ^# filename
⑤ LINUX过滤内容的问题
|1、复制文件到/tmp目录
cp /etc/rsyslog.conf /tmp
2、去除#开头和包含空格的行,重定向内到/root/grep.txt文件容
cat /tmp/rsyslog.conf | grep -v " "|sed 's/^#//g' > /root/grep.txt
⑥ 在linux操作系统中,如何单独的用grep或者是其它命令获取搜索关键词所在行除去关键词后的内容
sed后项引用
abc defg
sed 's@^\(ab\)c([[:space:]].*)@\1@'
ab defg
大概就是这个意思
⑦ linux 操作系统中shell过滤
这不简单,循环嵌套case多分枝选择结构,一楼的回答我就不说什么了,根本就没有/bash/这个路径,sh自然也不会存在在这个路径上。这个脚本就是可能的数值太多,case分支写得累……。算了,我给你写个吧。
说明:此脚本接收脚本后跟的第一个参数为读取定义数值的文本,比如说你在工作路径上有个叫test的文件,该文件定义了需要包含的数字,脚本本身的文件名是num那么执行该脚本的命令是./num ./test
每个数字对应的命令自己改吧,我这里全是打印文件里包含了对应的数值到标准输出上。以下脚本在ubuntu server 8.04测试通过。
#! /bin/bash
for var in `sed 's/,/ /g' $1` #注意,包围sed语句的是反引号,即字母键盘上方数字1左边的那个键
do
case $var in
0)
echo "0 is in the string\.";;
1)
echo "1 is in the string\.";;
2)
echo "2 is in the string\.";;
3)
echo "3 is in the string\.";;
4)
echo "4 is in the string\.";;
5)
echo "5 is in the string\.";;
6)
echo "6 is in the string\.";;
7)
echo "7 is in the string\.";;
8)
echo "8 is in the string\.";;
9)
echo "9 is in the string\.";;
10)
echo "10 is in the string\.";;
11)
echo "11 is in the string\.";;
12)
echo "12 is in the string\.";;
13)
echo "13 is in the string\.";;
14)
echo "14 is in the string\.";;
15)
echo "15 is in the string\.";;
16)
echo "16 is in the string\.";;
17)
echo "17 is in the string\.";;
18)
echo "18 is in the string\.";;
19)
echo "19 is in the string\.";;
20)
echo "20 is in the string\.";;
21)
echo "21 is in the string\.";;
22)
echo "22 is in the string\.";;
23)
echo "23 is in the string\.";;
24)
echo "24 is in the string\.";;
25)
echo "25 is in the string\.";;
26)
echo "26 is in the string\.";;
27)
echo "27 is in the string\.";;
28)
echo "28 is in the string\.";;
*)
echo "One or more variable\(s\) in $1 is out of range!";;
esac
done
⑧ 怎样用grep命令去掉空格行和以#开头的行
grep -vE '^#|^$' filename
“^”表示行首,“^”#就是以#开头的行。
“$”表示行尾,“^$”就是空行。
-E表示“或”的关系。
⑨ linux中怎么把grep过滤出的目录传给cd命令切换目录
cd命令
使用权限 : 所有使用者
使用方式 : cd [dirName]
说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝版对路径或相对权路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。
另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。
范例 : 跳到 /usr/bin/ :
cd /usr/bin
跳到自己的 home directory :
cd ~
跳到目前目录的上上两层 :
cd ../..
返回进入当前目录前所在目录
cd -
⑩ Linux:为什么查找进程的时候要过滤掉grep呢
因为你查找进程用到了grep命令,而这个命令执行的时候带有你查找的进程参数,同时专这也是一个进程。
例如 这条属命令 ps -ef | grep http 其实是分两步执行的 先执行ps -ef 再执行 grep http 这个命令本身执行的时候也是一个进程,并把也带有http。
所以你要查找http进程,需要把 grep http这个进程过滤掉,才是最后的结果,怎么过滤呢,肯定不能用http做关键字,只能用grep做关键字
也就是说查找http进程的话,这样写
ps -ef | grep http | grep -v grep