<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          運(yùn)用sed命令高效地刪除文件的特定行

          共 4599字,需瀏覽 10分鐘

           ·

          2020-08-28 12:52


          點(diǎn)擊「閱讀原文」查看良許原創(chuàng)精品視頻。

          運(yùn)用 sed 命令高效地刪除文件的特定行

          正常來說,我們想要刪除文件中的某些行內(nèi)容,一般都是先打開這個文件,然后找到要刪除的內(nèi)容,再然后選中這些行并按刪除鍵進(jìn)行刪除,這在數(shù)據(jù)量很少時是沒有問題的。但是,一旦文件中的行數(shù)據(jù)非常多,而且數(shù)據(jù)冗雜的情況下,你還要用上面的方法去做的話就很恐怖了。為此,今天這篇文章將帶大家一起學(xué)習(xí)運(yùn)用 sed 命令行工具,即使在數(shù)據(jù)多而雜的情況下也能高效而優(yōu)雅地刪除文件中的特定行內(nèi)容。

          sedStream Editor 的簡寫,它用于在 Linux 中進(jìn)行基本的文本轉(zhuǎn)換,是文件操作的一個重要命令,所以,我們也可以用它來實(shí)現(xiàn)文本的刪除操作。

          下面是一些 sed 命令的使用示例,覆蓋了大多數(shù)的使用場景,由淺入深地幫助你學(xué)習(xí) sed 命令,讓你輕松地實(shí)現(xiàn)高效刪除文件的特定行內(nèi)容。

          首先我們準(zhǔn)備一個演示文件 sed-demo.txt 。

          # cat sed-demo.txt
          1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE

          然后我們就可以運(yùn)用 sed 命令進(jìn)行實(shí)驗(yàn)了。

          注意:-i 表示直接進(jìn)行文件操作,而不在終端上顯示結(jié)果。因?yàn)槭茄菔舅赃@里不帶 -i 選項(xiàng),我們在實(shí)際中請帶上 -i 選項(xiàng)。

          1. 刪除某一行

          首先,我們先從刪除某一行開始,比如刪除第一行、最后一行,實(shí)際也就是第 N 行嘛。

          刪除第 N 行的命令格式:

          sed 'Nd' file

          我們來刪除第一行試試:

          # sed '1d' sed-demo.txt
          After deletion:2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE

          很簡單是吧?這里就不多作解釋了,你想要刪除第幾行的內(nèi)容只需要把命令中的 1 替換一下就 ok 了。

          那問題來了,最后一行用什么數(shù)字表示呢?這里給大家一個小提示,可以用美元符號 $ 表示最后,所以刪除最后一行的命令可以這么寫:

          # sed '$d' sed-demo.txt
          After deletion:1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu
          2. 刪除某些行

          sed 命令可以刪除連續(xù)又或者不連續(xù)的行內(nèi)容。

          刪除連續(xù)的行,例如刪除從 5 到 7 行 的內(nèi)容:

          # sed '5,7d' sed-demo.txt
          After deletion:1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat8 Debian9 Ubuntu10 openSUSE

          刪除不連續(xù)的行,例如刪除第 1 、第 5 、第 9 和最后一行

          # sed '1d;5d;9d;$d' sed-demo.txt
          After deletion:
          2 Unix Operating System3 RHEL4 Red Hat6 Arch Linux7 CentOS8 Debian

          另外,它還可以配合邏輯非 ! 使用,比如刪除第 3到 6 行以外的其他行:

          # sed '3,6!d' sed-demo.txt
          After deletion:
          3 RHEL4 Red Hat5 Fedora6 Arch Linux
          3. 刪除空白行

          sed 還支持刪除文件的空白行,命令如下:

          # sed '/^$/d' sed-demo.txt
          After deletion:
          1 Linux Operating System2 Unix Operating System3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE

          提示:這里兩個斜杠 / / 內(nèi)的表達(dá)式起到了文本匹配的作用,大家可以參考正則表達(dá)式的使用方法。下面將列舉一些常用的方法來加深大家的學(xué)習(xí)。

          4. 刪除包含特定字符的行

          假設(shè)我們想要刪除示例文件中的包含 System 這個單詞的行內(nèi)容,我們可以用 /System/,它表示有出現(xiàn) System 這個字符串就進(jìn)行匹配,具體的命令如下:

          # sed '/System/d' sed-demo.txt
          After deletion:
          3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE

          不僅如此,我們還可以加上一下邏輯條件,比方說下面的命令:

          # sed '/System\|Linux/d' sed-demo.txt
          After deletion:
          3 RHEL4 Red Hat5 Fedora7 CentOS8 Debian9 Ubuntu10 openSUSE

          符號 \| 代表邏輯或,上述命令的意思是文本中有 SystemLinux 的行都要進(jìn)行刪除。

          5. 刪除特定字符開頭的行

          首先,我們創(chuàng)建另一個示例文件 sed-demo-1.txt 進(jìn)行更好地演示,其內(nèi)容如下:

          # cat sed-demo-1.txt
          After deletion:Linux Operating SystemUnix Operating SystemRHELRed HatFedoradebianubuntuArch Linux - 12 - Manjaro3 4 5 6

          上面也已經(jīng)提到過,$ 號可以理解為結(jié)尾,那么有沒有字符可以代表開頭呢?答案是有的,這里我們可以用 ^ 號代表開頭。

          那么,我們想要刪除以某一個字符開頭的行時,比如說刪除以 R 開頭的行,可以使用如下命令:

          # sed '/^R/d' sed-demo-1.txt
          After deletion:Linux Operating SystemUnix Operating SystemFedoradebianubuntuArch Linux - 12 - Manjaro3 4 5 6

          那么問題來了,比如我想刪除以 R 或者 F 開頭的行,那我是不是要執(zhí)行兩次命令呢?如果是有更多豈不是要執(zhí)行多次命令?這里它有一個簡單的寫法,你只要把這些字符寫在一對中括號 [] 里就可以了:

          # sed '/^[RF]/d' sed-demo-1.txt
          After deletion:Linux Operating SystemUnix Operating SystemdebianubuntuArch Linux - 12 - Manjaro3 4 5 6

          上面命令的作用是 刪除以 R 或者 F 開頭的行

          6. 刪除特定字符結(jié)尾的行

          同上面一個道理,刪除以某一個字符結(jié)尾的行,比方說刪除以 m 結(jié)尾的行,我們可以這樣做:

          # sed '/m$/d' sed-demo.txt
          After deletion:3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE

          刪除以 x 或 m 結(jié)尾的行可以這樣寫:

          # sed '/[xm]$/d' sed-demo.txt
          After deletion:
          3 RHEL4 Red Hat5 Fedora7 CentOS8 Debian9 Ubuntu10 openSUSE
          7. 刪除以大寫字母開頭的行

          這里問題又來了,我想要刪除所有以大寫字母開頭的行呢?按照上面的做法是不是要將 A 到 Z 這 26 個字母都寫進(jìn) [ ] 里呢?其實(shí)我們大可不必這樣做,在 A 和 Z 中間加個 - 就可以了:

          # sed '/^[A-Z]/d' sed-demo-1.txt
          After deletion:debianubuntu2 - Manjaro3 4 5 6

          機(jī)智的你看到這里肯定會想到其他類似的用法的了,不妨看看下面是否有你想到的命令吧。

          8. 刪除包含字母字符的行
          # sed '/[A-Za-z]/d' sed-demo-1.txt
          After deletion:3 4 5 6
          9. 刪除包含數(shù)字的行
          # sed '/[0-9]/d' sed-demo-1.txt
          After deletion:
          Linux Operating SystemUnix Operating SystemRHELRed HatFedoradebianubuntu

          另外,通過這個例子,我們可以加上 ^$ 更好地看到他們?nèi)齻€之間的區(qū)別:

          # sed '/^[0-9]/d' sed-demo-1.txt
          After deletion:
          Linux Operating SystemUnix Operating SystemRHELRed HatFedoradebianubuntuArch Linux - 1
          # sed '/[0-9]$/d' sed-demo-1.txt
          After deletion:
          Linux Operating SystemUnix Operating SystemRHELRed HatFedoradebianubuntu2 - Manjaro
          10. 其他更多

          實(shí)際上,我們要刪除的文件內(nèi)容是更為具體的,簡單的條件是滿足不了我們的需求的,所以,sed 也支持更復(fù)雜的條件組合。比方說我要指定刪除在 1 到 6 行內(nèi)有 Linux 這個詞的內(nèi)容,那么:

          # sed '1,6{/Linux/d;}' sed-demo.txt
          After deletion:2 Unix Operating System3 RHEL4 Red Hat5 Fedora7 CentOS8 Debian9 Ubuntu10 openSUSE

          刪除包含 System 以及其下一行的內(nèi)容

          # sed '/System/{N;d;}' sed-demo.txt
          After deletion:3 RHEL4 Red Hat5 Fedora6 Arch Linux7 CentOS8 Debian9 Ubuntu10 openSUSE


          良許個人微信


          添加良許個人微信即送3套程序員必讀資料


          → 精選技術(shù)資料共享

          → 高手如云交流社群





          本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲??!

          推薦閱讀:

          七夕 - 程序員表白代碼

          如何在Linux上使用xargs命令

          Bashtop – Linux的資源監(jiān)視工具


          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。。?/span>


          瀏覽 38
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产在线最新 | 久久婷婷五月综合 | 国产黄色A级毛片 | 91无码人妻精品1国产一区二区 | 色婷婷一区二区 |