linux系统下 vi文本编辑器搜索单词打什么命令

linux系统下 vi文本编辑器搜索单词打什么命令,第1张

vi文本编辑器搜索

简单搜索

"/string"用于向下搜索一个字符串,按n按照搜索相同的方向跳转到下一个匹配项,像一般的命令一样,前面加上数字,标示命令计数,比如"2n"代表第三个匹配的目标。按N会和之前命令想法的方向就像搜索下一个。

"?string"用于反向向上搜索字符转,n,N的用法同上。

搜索忽略大小写

:set ignorecase

设置大小写区分

:set noignorecase

命令记录

假设你做过三次的搜索

/one

/two

/there

现在你想再次的重复搜索one,不需要自己输入全部的字符串"/one"

利用命令的记录功能,只需要输入"/"按后通过方向键选择记录,如上,按三次向上方向键即可得到"/one",同样,你可以输入"/o"按后按向上方向键,即可自动匹配第一个以o开头的命令记录。(在:命令模式下,此方法相同使用,命令记录不相混淆)

当你要键入的单词太长时,你可以将光标移到你要搜索的单词上,在普通模式下,按下*键,即可以当前词为搜索向下搜索,#则向上搜索。这种方法上的单词完全匹配,如果你要搜素的字符串可能还包含在一个其他长字符串里面,可以使用g*,g#进行搜索。

在本行搜索某一个字符

fx 在当前行,向前将光标移动到字符x上

Fx 在当前行,向后将光标移动带字符x上

tx 在当前行,向前将光标移动到字符x之前的字符上

Tx 在当前行,向后将光标移动到字符x之后的字符上

, 按照上次搜索(f,F,t,T)的反向进行搜索

重复上次搜索

使用"/the"会搜索到there,soothe,the,athea

可以通过不同的方法匹配不同的搜索

"/the/>" 得到结果there

"//<the" 得到结果soothe

"//<the/>" 得到结果the

"/>"是一特殊记法,只匹配一个Word的结束处

"/<"是一特殊记法,只匹配一个Word的开始处

高亮显示搜索结果

将搜索的家国高亮显示,将十分的直观

开启:set hlsearch

关闭:set nohlsearch

调整搜索结果

:set incsearch 这使得你在键入目标字符的时候vim就开始搜索,使用这种方法,可以使你在未完全输入目标的情况下就可以找到一些结果

使用正则表达式

^字符匹配一行的开头

$字符匹配一行的结尾

eg:

将光标移动到下面一句话的第一个the上,输入*

the solder holding one of the chips melted and the

XXX XXX XXX(搜索高亮标记)

输入"/thetiny_mce_markerquot得到以下匹配结果

the solder holding one of the chips melted and the

XXX(搜索高亮标记)

输入"/^the"则得到以下结果

the solder holding one of the chips melted and the

XXX (搜索高亮标记)

同理输入"/^thetiny_mce_markerquot将匹配一行内容仅含the的行

/jo[ha]n 将搜索john或者joan

.字符可以匹配任意字符

eg:

"/t.e" 将搜索匹配the tee等

(如果你要搜索的字符串里包含特殊字符,比如.则适应转义字符/房子特殊字符前面)

"//<..../>" 将搜索任何四个字母的字符串

/d代表一个数字

//d 搜索数字 a1a

//</d/> 搜索作为独立单词的一个数字 1

//</d/d/> 搜索作为独立单词的两个数字 12

/^$ 搜索空白行

/^/n 同上

--------

指定重复的次数

--------

要制定重复的次数,可以使用"/{n,m}"这样的形式。"n"和"m"代表数字,其前的项目会被匹配"n"次到"m"次

/^/n/{3} 搜索三个空白行

/ab/{{3,5} 匹配"abbb","abbbb","abbbbb"

如果"n"被忽略,就默认它是0,如果"m"忽略,就默认它是无穷大,如果",m"被忽略,那么精确匹配"n"次重复

/{,4} 0,1,2,3,4次

/{3,} 大于等于3次

/{3,4} 3,4次

/{4} 4次

/= 0或者1

* 0或者多次

/+ 一次或者多次

--------

多选一

--------

在一个 *** 作中的"或" *** 作符是"/|"。如:

/fred/|joe 将搜索fred或者joe

多个选项能继续串联在一起

/one/|two/|three

/end/(if/|while/|for/) 匹配的是"endif","endwhile","endfor"

--------

字符范围

--------

[a-z] a到z中的一个字符

[^a-z] 除了a到z中的一个字符

预定义字符集

//a 所有字母 /[a-zA-Z]

//d 数字 /[0-9]

//D 非数字 /[^0-9]

//x 十六进制数 /[0-9a-fA-F]

//X 非十六进制数 /[^0-9a-fA-F]

//s 空白字符 /[ ]

//S 非空白字符 /[^ ]

//l 小写字母 /[a-z]

//L 非小写字母 /[^a-z]

//u 大写字母 /[A-Z]

//U 非大写字母 /[^A-Z]

//h /[A-Za-z]

//w /[0-9A-Za-z]

linux下vim 查找命令:

/text --查找text, 按n查找下一个, N查找上一个

?text --查找text(反向查找), 按n查找下一个, N查找上一个

*/# --查找光标当前的单词,相当于/text

:set ignorecase --查找忽略大小写

:set noignorecase --查找不忽略大小写

:nohlsearch --关闭当前的高亮显示,当再次查找时恢复高亮

:set incsearch --逐步搜索模式,对当前键入的字符进行查找,不必等输入完成

:set wrapscan --重新搜索,当搜索到文件头或尾时,返回重新搜索

扩展资料:

1、文件窗口:

:open file --在当前窗口打开新文件

:split file --在新窗口打开文件

:new file --用新窗口打开文件,同 :split file

:bn --切换到下一个文件

:bp --切换到上一个文件

:args --查看当前打开的文件列表(当前正在编辑的文件会用[]括起来)

:e ftp://192.168.10.76/abc.txt

:e \qadrive est.txt --打开远程文件

:split --打开一个新窗口,光标停在顶层的窗口上

:new --打开一个新窗口,光标停在顶层的窗口上

:vsplit --横向打开窗口。

Ctrl+ww --移动到下一个窗口

Ctrl+wj --移动到下方的窗口

Ctrl+wk --移动到上方的窗口

2、其他命令:

Esc/Ctrl+[ -- 键入命令

:!command --执行shell命令

:suspend/Ctrl+Z --挂起vim,回到shell,fg 返回vim

:!perl -c script.pl --检查perl脚本语法,不用退出vim

:!perl script.pl --执行perl脚本, 不用退出vim

:help --显示帮助文档

:help i --显示i的帮助文档(:特殊键用<>, -t:启动参数用-)

3、编辑命令:

插入:

i --在当前位置插入

A --在当前行尾插入

I --在当前行首插入

o --在当前行后插入一行

O --在当前行前插入一行

拷贝粘贴剪切:

yy --拷贝当前行

2yy --拷贝当前行开始的2行

p --在当前光标后粘贴

P --在当前行前粘贴

:1,10 co 20 --将1-10行插入到第20行之后。

:1,$ co $ --将整个文件复制一份并添加到文件尾部

v --进入选择模式,相当于在Windows下按住 Shift选择

V --进入选择模式,整行选择

ddp --交换当前行和其下一行

2dd --剪切当前行之后的2行

:1,10d --将1-10行剪切

:1, 10 m 20 --将第1-10行移动到第20行之后

替换:

ra --将当前光标所在字符替换为a

s/old/new/ --用old替换new,替换当前行的第一个匹配

s/old/new/g --用old替换new,替换当前行的所有匹配

%s/old/new/ --用old替换new,替换所有行的第一个匹配

%s/old/new/g --用old替换new,替换所有匹配

:10,20 s/^/text/g --在第10行到第20行每行前面加上text(:3,5 s/^/#/g --注释3-5行, :3,5 s/^#//g

--解除3-5行的注释, :1,$ s/^/#/g --注释整个文档, :%s/^/#/g --注释整个文档)

ddp --交换光标所在行和下一行

移动:

h --左移一个字符(5h --左移5个字符)

l --右移一个字符(5l --右移5个字符)

k --上移一个字符(5k --上移5个字符)

j --下移一个字符(5j --下移5个字符)

w --向后移动一个单词(5w --向后移动5个单词)

b --向前移动一个单词(5b --向前移动5个单词)

e --同 w ,光标停在单词尾部

ge --同 e ,光标停在单词尾部

^ --移动到本行第一个非空白字符

0 --移动到本行第0个字符

--同0

$ --移动到行尾(3$ --移动到下面3行的行尾)

gg --移动到文件头(10gg --移动到第10行首)

[[ --同 gg

G --移动到文件尾(10G --移动到第10行尾)

]] --同 G

fx --移动到本行光标后第一个为x的字符(3fx --移动到本行光标后第3个为x的字符)

Fx --同 fx ,反向查找

:20 --跳到20行行首

Ctrl+e --向下滚动一行

Ctrl+y --向上滚动一行

Ctrl+d --向下滚动半屏

Ctrl+u --向上滚动半屏

Ctrl+f --向下滚动一屏

Ctrl+b --向上滚动一屏

撤销:

u --撤销

U --撤销对整行的 *** 作

Ctrl+r --撤销刚才的撤销

删除:

x --删除当前字符(3x --删除当前光标开始向后三个字符)

X --删除当前字符的前一个字符, 同 dh

dl --删除当前字符, 同 x

dh --删除前一个字符

dd --删除当前行

dj --删除上一行

dk --删除下一行

10d --删除当前行开始的10行。

D --删除当前字符至行尾, 同 d$

kdgg --删除当前行之前所有行(不包括当前行)

:1,10d --删除1-10行

:11,$d --删除11行及以后所有的行

:1,$d --删除所有行

J --删除两行之间的空行, 合并两行

退出

:wq --保存并退出

ZZ --保存并退出

:q! --强制退出并忽略所有更改

:e! --放弃所有修改,并打开原来文件

:close --关闭窗口,最后一个窗口不能使用此命令,可以防止意外退出vim

:q --如果是最后一个被关闭的窗口,那么将退出vim

Linux常用指令---grep(搜索过滤) (转)

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.命令格式:

grep [option] pattern file

2.命令功能:

用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,使用上十分灵活。

3.命令参数:

-a   --text   #不要忽略二进制的数据。   

-A<显示行数>   --after-context=<显示行数>   #除了显示符合范本样式的那一列之外,并显示该行之后的内容。   

-b   --byte-offset   #在显示符合样式的那一行之前,标示出该行第一个字符的编号。   

-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前的内容。   

-c    --count   #计算符合样式的列数。   

-C<显示行数>    --context=<显示行数>或-<显示行数>   #除了显示符合样式的那一行之外,并显示该行之前后的内容。   

-d <动作>      --directories=<动作>   #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。   

-e<范本样式>  --regexp=<范本样式>   #指定字符串做为查找文件内容的样式。   

-E      --extended-regexp   #将样式为延伸的普通表示法来使用。   

-f<规则文件>  --file=<规则文件>   #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。   

-F   --fixed-regexp   #将样式视为固定字符串的列表。   

-G   --basic-regexp   #将样式视为普通的表示法来使用。   

-h   --no-filename   #在显示符合样式的那一行之前,不标示该行所属的文件名称。   

-H   --with-filename   #在显示符合样式的那一行之前,表示该行所属的文件名称。   

-i    --ignore-case   #忽略字符大小写的差别。   

-l    --file-with-matches   #列出文件内容符合指定的样式的文件名称。   

-L   --files-without-match   #列出文件内容不符合指定的样式的文件名称。   

-n   --line-number   #在显示符合样式的那一行之前,标示出该行的列数编号。   

-q   --quiet或--silent   #不显示任何信息。   

-r   --recursive   #此参数的效果和指定“-d recurse”参数相同。   

-s   --no-messages   #不显示错误信息。   

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

-V   --version   #显示版本信息。   

-w   --word-regexp   #只显示全字符合的列。   

-x    --line-regexp   #只显示全列符合的列。   

-y   #此参数的效果和指定“-i”参数相同。

4.规则表达式:

grep的规则表达式:

^  #锚定行的开始 如:'^grep'匹配所有以grep开头的行。    

$  #锚定行的结束 如:'grep$'匹配所有以grep结尾的行。    

.  #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。    

*  #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。    

.*   #一起用代表任意字符。   

[]   #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。    

[^]  #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。    

\(..\)  #标记匹配字符,如'\(love\)',love被标记为1。    

\<      #锚定单词的开始,如:'\

\>      #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。    

x\{m\}  #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。    

x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。    

x\{m,n\}  #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   

\w    #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   

\W    #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。   

\b    #单词锁定符,如: '\bgrep\b'只匹配grep。  

POSIX字符:

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]    #文字数字字符   

[:alpha:]    #文字字符   

[:digit:]    #数字字符   

[:graph:]    #非空字符(非空格、控制字符)   

[:lower:]    #小写字符   

[:cntrl:]    #控制字符   

[:print:]    #非空字符(包括空格)   

[:punct:]    #标点符号   

[:space:]    #所有空白字符(新行,空格,制表符)   

[:upper:]    #大写字符   

[:xdigit:]   #十六进制数字(0-9,a-f,A-F)  

5.使用实例:

实例1:查找指定进程

命令:

ps -ef|grep svn

输出:

[root@localhost ~]# ps -ef|grep svn

root 4943   1      0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/

root 16867 16838  0 19:53 pts/0    00:00:00 grep svn

[root@localhost ~]#

说明:

第一条记录是查找出的进程;第二条结果是grep进程本身,并非真正要找的进程。

实例2:查找指定进程个数

命令:

ps -ef|grep svn -c

ps -ef|grep -c svn

输出:

[root@localhost ~]# ps -ef|grep svn -c

2

[root@localhost ~]# ps -ef|grep -c svn 

2

[root@localhost ~]#

说明:

实例3:从文件中读取关键词进行搜索

命令:

cat test.txt | grep -f test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行

实例3:从文件中读取关键词进行搜索 且显示行号

命令:

cat test.txt | grep -nf test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -nf test2.txt

1:hnlinux

4:ubuntu linux

6:Redhat

7:linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号

实例5:从文件中查找关键词

命令:

grep 'linux' test.txt

输出:

[root@localhost test]# grep 'linux' test.txt 

hnlinux

ubuntu linux

linuxmint

[root@localhost test]# grep -n 'linux' test.txt 

1:hnlinux

4:ubuntu linux

7:linuxmint

[root@localhost test]#

说明:

实例6:从多个文件中查找关键词

命令:

grep 'linux' test.txt test2.txt

输出:

[root@localhost test]# grep -n 'linux' test.txt test2.txt 

test.txt:1:hnlinux

test.txt:4:ubuntu linux

test.txt:7:linuxmint

test2.txt:1:linux

[root@localhost test]# grep 'linux' test.txt test2.txt 

test.txt:hnlinux

test.txt:ubuntu linux

test.txt:linuxmint

test2.txt:linux

[root@localhost test]#

说明:

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出并且加上":"作为标示符

实例7:grep不显示本身进程

命令:

ps aux|grep \[s]sh

ps aux | grep ssh | grep -v "grep"

输出:

[root@localhost test]# ps aux|grep ssh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 

root  16901  0.0  0.0  61180   764 pts/0  S+   20:31   0:00 grep ssh

[root@localhost test]# ps aux|grep \[s]sh]

[root@localhost test]# ps aux|grep \[s]sh

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0 

[root@localhost test]# ps aux | grep ssh | grep -v "grep"

root   2720  0.0  0.0  62656  1212 ?      Ss   Nov02   0:00 /usr/sbin/sshd

root  16834  0.0  0.0  88088  3288 ?      Ss   19:53   0:00 sshd: root@pts/0

说明:

实例8:找出已u开头的行内容

命令:

cat test.txt |grep ^u

输出:

[root@localhost test]# cat test.txt |grep ^u

ubuntu

ubuntu linux

[root@localhost test]#

说明:

实例9:输出非u开头的行内容

命令:

cat test.txt |grep ^[^u]

输出:

[root@localhost test]# cat test.txt |grep ^[^u]

hnlinux

peida.cnblogs.com

redhat

Redhat

linuxmint

[root@localhost test]#

说明:

实例10:输出以hat结尾的行内容

命令:

cat test.txt |grep hat$

输出:

[root@localhost test]# cat test.txt |grep hat$

redhat

Redhat

[root@localhost test]#

说明:

实例11:输出ip地址

命令:

     ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

输出:

[root@localhost test]# ifconfig eth0|grep "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]# ifconfig eth0|grep -E "([0-9]{1,3}\.){3}[0-9]"

          inet addr:192.168.120.204  Bcast:192.168.120.255  Mask:255.255.255.0

[root@localhost test]#

说明:

实例12:显示包含ed或者at字符的内容行

命令:

cat test.txt |grep -E "ed|at"

输出:

[root@localhost test]# cat test.txt |grep -E "peida|com"

peida.cnblogs.com

[root@localhost test]# cat test.txt |grep -E "ed|at"

redhat

Redhat

[root@localhost test]#

说明:

实例13:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行

命令:

grep '[a-z]\{7\}' *.txt

输出:

[root@localhost test]# grep '[a-z]\{7\}' *.txt

test.txt:hnlinux

test.txt:peida.cnblogs.com

test.txt:linuxmint

[root@localhost test]#

实例14:日志文件过大,不好查看,我们要从中查看自己想要的内容,或者得到同一类数据,比如说没有404日志信息的

命令:

grep '.' access1.log|grep -Ev '404' > access2.log

grep '.' access1.log|grep -Ev '(404|/photo/|/css/)' > access2.log

grep '.' access1.log|grep -E '404' > access2.log

输出:

[root@localhost test]# grep “.”access1.log|grep -Ev “404” > access2.log

说明:上面3句命令前面两句是在当前目录下对access1.log文件进行查找,找到那些不包含404的行,把它们放到access2.log中,后面去掉’v’,即是把有404的行放入access2.log


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7725843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存