linux vi模式替换,linux基础命令之:vi模式下查找和替换
一、查找
查找命令
/pattern :向下查找pattern匹配字符串
?pattern:向上查找pattern匹配字符串
使用了查找命令之后,使用如下兩個(gè)鍵快速查找:
n:按照同一方向繼續(xù)查找
N:按照反方向查找
pattern是需要匹配的字符串,例如:
/hello????? #查找hello
/hello??? #查找hello單詞(注意前后的空格)
除此之外,pattern還可以使用一些特殊字符,包括(/、^、$、*、.),其中前三個(gè)這兩個(gè)是vi與vim通用的,“/”為轉(zhuǎn)義字符。
/^hello??? #查找以hello開(kāi)始的行
/hello$??? #查找以hello結(jié)束的行
//^hello??? #查找^hello字符串
二、替換
1.:[range]s/pattern/string/[c,e,g,i]
range???? 指的是范圍,
1,7 指從第一行至第七行,1,$ 指從第一行至最后一行,也就是整篇文章,也可以 % 代表。
% 是目前編輯的文章,# 是前一次編輯的文章。
pattern???? 就是要被替換掉的字串,可以用 regexp 來(lái)表示。
string???? 將 pattern 由 string 所取代。
c???? confirm,每次替換前會(huì)詢問(wèn)。
e???? 不顯示 error。
g???? globe,不詢問(wèn),整行替換。
i???? ignore 不分大小寫(xiě)。
I???? ignore 大小寫(xiě)敏感。
2.基本替換
:s/lantian/sky/???????? #替換當(dāng)前行第一個(gè) lantian 為 sky
:s/lantian/sky/g???? #替換當(dāng)前行所有 lantian 為 sky
:n,$s/lantian/sky/???? #替換第 n 行開(kāi)始到最后一行中每一行的第一個(gè) lantian 為 sky
:n,$s/lantian/sky/g???? #替換第 n 行開(kāi)始到最后一行中每一行所有 lantian 為 sky
#(n 為數(shù)字,若 n 為 .,表示從當(dāng)前行開(kāi)始到最后一行)
:%s/lantian/sky/??????? #(等同于 :g/lantian/s//sky/) 替換每一行的第一個(gè)?lantian 為 sky
:%s/lantian/sky/g??? #(等同于 :g/lantian/s//sky/g) 替換每一行中所有?lantian 為 sky
可以使用 #或+ 作為分隔符,此時(shí)中間出現(xiàn)的 / 不會(huì)作為分隔符
:s#lantian/#sky/#???????? 替換當(dāng)前行第一個(gè) lantian/ 為 sky/
:%s+/oradata/apras/+/user01/apras1+ (
使用+ 來(lái) 替換 / ): /oradata/apras/替換成/user01/apras1/
3.刪除文本中的^M
問(wèn)題描述:對(duì)于換行,window下用回車(chē)換行(0A0D)來(lái)表示,linux下是回車(chē)(0A)來(lái)表示。這樣,將window上的文件拷到unix上用時(shí),總會(huì)有個(gè)^M,請(qǐng)寫(xiě)個(gè)用在unix下的過(guò)濾windows文件的換行符(0D)的shell或c程序。
使用命令:cat filename1 | tr -d “^V^M” > newfile;
使用命令:sed -e “s/^V^M//” filename > outputfilename
需要注意的是在1、2兩種方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必須要手工進(jìn)行輸入,而不是粘貼。
在vi中處理:首先使用vi打開(kāi)文件,然后按ESC鍵,接著輸入命令:
:%s/^V^M//
:%s/^M$//g
如果上述方法無(wú)用,則正確的解決辦法是:
tr -d “/r” < src >dest
tr -d “/015″ dest
strings A>B
4.其它用法
:s/str1/str2/????????? #用字符串 str2 替換行中首次出現(xiàn)的字符串 str1
:s/str1/str2/g???????? #用字符串 str2 替換行中所有出現(xiàn)的字符串 str1
:.,$ s/str1/str2/g???? #用字符串 str2 替換正文當(dāng)前行到末尾所有出現(xiàn)的字符串 str1
:1,$ s/str1/str2/g???? #用字符串 str2 替換正文中所有出現(xiàn)的字符串 str1
:g/str1/s//str2/g????? #功能同上
5.g的總結(jié)說(shuō)明
從上述替換命令可以看到:
g 放在命令末尾,表示對(duì)指定行的搜索字符串的每次出現(xiàn)進(jìn)行替換;不加 g,表示只對(duì)指定行的搜索字符串的首次出現(xiàn)進(jìn)行替換;
g 放在命令開(kāi)頭,表示對(duì)正文中所有包含搜索字符串的行進(jìn)行替換操作。
也就是說(shuō)命令的開(kāi)始可以添加影響的行,如果為g表示對(duì)所有行;命令的結(jié)尾可以使用g來(lái)表示是否對(duì)每一行的所有字符串都有影響。
總結(jié)
以上是生活随笔為你收集整理的linux vi模式替换,linux基础命令之:vi模式下查找和替换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ryzen 定制内存:突破性能瓶颈,稳定
- 下一篇: 揭秘x99主板内存插槽数,让你的电脑性能