成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習使用 Sed 文本編輯器

系統 Linux
sed 命令是為 AT&T 最初的 Unix 操作系統第 7 版創建的,此后,可能每一個 Unix 和 Linux 操作系統都包含了它。sed 應用程序是一個 流編輯器,與文本編輯器不同的是,它不會打開一個視覺緩沖區,將文件的數據加載到其中進行處理。相反,它根據在終端輸入的命令或腳本中的一系列命令,逐行對文件進行操作。

[[374363]]

Sed 缺少通常的文本框,而是按照用戶的命令直接寫入到文件上。

sed 命令是為 AT&T 最初的 Unix 操作系統第 7 版創建的,此后,可能每一個 Unix 和 Linux 操作系統都包含了它。sed 應用程序是一個 流編輯器,與文本編輯器不同的是,它不會打開一個視覺緩沖區,將文件的數據加載到其中進行處理。相反,它根據在終端輸入的命令或腳本中的一系列命令,逐行對文件進行操作。

安裝

如果你使用的是 Linux、BSD 或 macOS,那么你已經安裝了 GNU 或 BSD 版的 sed。這是兩個不同的原始 sed 命令的重新實現,雖然它們很相似,但也有一些小的區別。GNU sed 通常被認為是功能最豐富的 sed,而且它在這些平臺上都可以廣泛使用。

如果你找不到 GNU sed(在非 Linux 系統上通常被稱為 gsed),那么你可以從 GNU 網站上下載它的源代碼。安裝 GNU sed 的好處是,可以使用它的額外功能,但它也可以被限制為只符合 sed 的 POSIX 規范,如果你需要移植性的話。

在 Windows 上,你可以用 Chocolatey 來安裝 GNU sed

Sed 如何工作

sed 應用程序一次只處理一行。因為它沒有視覺顯示,所以它在內存中創建了一個模式空間:一個包含輸入流的當前行的空間(去掉任何尾部的換行符)。一旦填充了模式空間,你對 sed 的指令就會被執行。有時你的指令是有條件的,有時是無條件的,所以這些指令的結果取決于你如何使用 sed

當命令結束時,sed 會將模式空間的內容打印到輸出流中。默認的輸出流是標準輸出,但可以將其重定向到一個文件,甚至使用 --in-place=.bak 選項重定向到同一個文件中。

然后再從下一個輸入行開始循環。

sed命令的語法是:

  1. $ sed --options [optional SCRIPT] [INPUT FILE or STREAM]

找到你要編輯的內容

在可視化編輯器中,你通常不需要考慮太多,就能在文本文件中找到你想要修改的內容。你的眼睛(或屏幕閱讀器)會掃描文本,找到你想改變的單詞或你想插入或刪除文本的地方,然后你就可以開始輸入了。而 sed 沒有交互模式,所以你需要告訴它必須滿足什么條件才能運行特定的命令。

在這些例子中,假設一個名為 example.txt 的文件包含了這樣的文字:

  1. hello
  2. world
  3. This is line three.
  4. Here is the final line.

行號

指定行號告訴 sed 只對文件中的那一行進行操作。

例如,下面這條命令選擇文件的第 1 行并打印出來。因為 sed 在處理后的默認操作也是打印一行到標準輸出,這樣做的效果就是重復第一行:

  1. $ sed '1p' example.txt
  2. hello
  3. hello
  4. world
  5. This is line three.
  6. Here is the final line.

你也可以步進式指定行號。例如,1~2 表示每兩行選擇一行(“從第一行開始每兩行選擇一行”)。指令 1~3 表示從第一行開始,每三行選擇一行:

  1. $ sed '1p' example.txt
  2. hello
  3. hello
  4. world
  5. This is line three.
  6. Here is the final line.
  7. Here is the final line.

行定位

你可以通過使用 $ 作為選擇器,只對文件的最后一行進行操作:

  1. $ sed '$p' example.txt
  2. hello
  3. world
  4. This is line three.
  5. Here is the final line.
  6. Here is the final line.

在 GNU sed 中,你可以選擇多行(例如,sed '1,$p' 打印第一行和最后一行)。

反轉

任何數字或位置的選擇,你都可以用感嘆號(!)字符反轉。下面這將選擇除第一行以外的所有行:

  1. $ sed '1!p' example.txt
  2. hello
  3. world
  4. world
  5. This is line three.
  6. This is line three.
  7. Here is the final line.
  8. Here is the final line.

模式匹配

你可以把模式匹配想象成文字處理器或瀏覽器中的查找操作。你提供一個詞(一個 模式),然后選擇了結果。模式匹配的語法是 /pattern/

  1. $ sed '/hello/p' example.txt
  2. hello
  3. hello
  4. world
  5. This is line three.
  6. Here is the final line.
  7. $ sed '/line/p' example.txt
  8. hello
  9. world
  10. This is line three.
  11. This is line three.
  12. Here is the final line.
  13. Here is the final line.

用 Sed 編輯

一旦你找到了你要編輯的內容,你就可以執行你想要的任何操作。你可以用 sed 中的命令來執行編輯。sed 中的命令不是 sed 命令本身。如果這樣說有幫助的話,可以把它們看作是“動作”或“動詞”或“指令”。

sed 中的命令是單個字母,例如前面例子中使用的打印命令的 p。它們一開始可能很難記憶,但和所有事情一樣,你會隨著練習而了解它們。

p 代表打印

p 指令打印當前模式空間中的任何內容。

d 用于刪除

d 指令刪除模式空間:

  1. $ sed '$d' example.txt
  2. hello
  3. world
  4. This is line three.
  5. $ sed '1d' example.txt
  6. world
  7. This is line three.
  8. Here is the final line.

s 用于搜索和替換

s 命令搜索一個模式并將其替換為其他東西。這可能是 sed 最流行和最隨意的用法,而且它通常是用戶學習的第一個(有時也是唯一的)sed 命令。幾乎可以肯定它是文本編輯中最有用的命令:

  1. $ sed 's/world/opensource.com/' example.txt
  2. hello
  3. opensource.com
  4. This is line three.
  5. Here is the final line.

在你的替換文本中,也可以使用一些特殊的功能。例如,\L 將替換文本轉換為小寫,\l 則只轉換下一個字符。還有其他一些功能,列在 sed 文檔中(你可以用 info sed 命令查看)。

替換子句中的特殊字符 & 指的是匹配到的模式:

  1. $ sed 's/is/\U&/' example.txt
  2. hello
  3. world
  4. ThIS is line three.
  5. Here IS the final line.

你也可以通過特殊的標志來影響 s 如何處理它找到的內容。g(應該是指 全局)標志告訴 s 對行上找到的所有匹配項進行替換,而不僅僅是第一個匹配項:

  1. $ sed 's/is/\U&/g' example.txt
  2. hello
  3. world
  4. ThIS IS line three.
  5. Here IS the final line.

其他重要的標志還包括用一個數字來表示要影響第幾個出現的匹配模式:

  1. $ sed 's/is/\U&/2' example.txt
  2. hello
  3. world
  4. This IS line three.
  5. Here is the final line.

w 標志,后面跟著一個文件名,_只有_在有變化的情況下,才會將匹配的行寫入文件:

  1. $ sed 's/is/\U&/w sed.log' example.txt
  2. hello
  3. world
  4. ThIS is line three.
  5. Here IS the final line.
  6. $ cat sed.log
  7. ThIS is line three.
  8. Here IS the final line.

標志可以組合:

  1. $ sed 's/is/\U&/2w sed.log' example.txt
  2. hello
  3. world
  4. This IS line three.
  5. Here is the final line.
  6. $ cat sed.log
  7. This IS line three.

腳本

有很多很棒的網站都有 sed “單行腳本”,它們給你提供了面向任務的 sed 命令來解決常見的問題。然而,自己學習 sed 可以讓你寫出自己的單行腳本,而且這些單行腳本可以根據你的具體需求來定制。

sed 的腳本可以在終端中寫成一行,也可以保存到文件中,然后用 sed 本身執行。我傾向于把小腳本寫成一個命令,因為我發現自己在現實生活中很少重復使用 sed 命令。當我寫一個 sed 腳本時,通常都是針對一個文件的。例如,在寫完這篇文章的初稿后,我用 sed 來規范 “sed” 的大小寫,而這是我可能永遠也不會再做的任務。

你可以向 sed 發出一系列不同的命令,用分號(;)分開。

  1. $ sed '3t ; s/line/\U&/' example.txt
  2. hello
  3. world
  4. This is LINE three.
  5. This is the final line.

帶括號的范圍改變

你也可以用大括號({})限制哪些結果受到影響。當你將 sed 命令用大括號括起來時,它們只適用于特定的選擇。例如,“line” 字出現在樣本文本的兩行中。你可以通過聲明所需的匹配條件($ 表示最后一行),并將你希望執行的 s 命令放在緊隨其后的括號中,強制 sed 只影響最后一行:

  1. $ sed '$ {s/line/\U&/}' example.txt
  2. hello
  3. world
  4. This is line three.
  5. This is the final LINE.

學習 Sed

你可以用 sed 做的事情比本文所解釋的多得多。我甚至還沒有涉及到分支(b)、測試(t)、保留空格(H)和許多其他功能。就像 ed 一樣,sed 可能不是你要用來創建文檔的文本編輯器,甚至不是你需要做的每一個腳本任務中使用的文本編輯器,但它是你作為 POSIX 用戶的一個強大的選擇。學習 sed 命令的結構以及如何編寫簡短的腳本可以快速修改大量的文本。閱讀 GNU sed 的info 頁面,或者 BSD sed 的手冊頁,看看 sed 能為你做什么。 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2010-03-24 09:20:07

CentOS vi編輯

2021-01-08 13:56:50

LinuxJOE文本編輯器

2020-12-23 22:25:11

Vi文本編輯器Unix

2020-12-29 06:34:55

KDE Plasma文本編輯器

2022-05-13 15:32:11

GNOME文本編輯器

2017-07-27 20:21:06

iOSUITableView富文本編輯器

2021-01-13 13:29:06

文本編輯器Atom開源

2021-01-13 19:13:57

Atom文本編輯器

2021-01-21 16:03:15

Java文本編輯器編程語言

2023-04-17 11:03:52

富文本編輯器MTE

2020-12-20 08:49:01

gedit文本編輯器GNOME

2021-01-03 16:57:43

heredoc文本編輯器Linux

2012-09-29 11:38:27

編程工具文本編輯器編程

2022-01-18 09:35:36

GNOME編輯器Linux

2015-06-26 11:11:50

GitHub Ato文本編輯器

2014-06-05 10:34:54

Notepad++

2013-11-18 10:08:56

工具免費編程工具

2016-09-23 20:30:54

Javascriptuiwebview富文本編輯器

2011-05-11 10:27:42

文本編輯器

2009-12-09 10:27:03

VS 2005文本編輯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人a视频 | 亚洲网站免费看 | 一区二区三区成人 | 日本不卡一区二区三区在线观看 | 毛片一级片 | 久久综合久久自在自线精品自 | 亚洲天天干 | 成人在线视频一区二区三区 | 91精品国产综合久久久久 | 一区二区在线观看免费视频 | 一区二区三区四区在线视频 | 日本久久精 | 2022精品国偷自产免费观看 | 中文字幕在线看第二 | 亚洲精品1区 | 国产精品久久久久久久久免费相片 | 日韩国产欧美一区 | 欧美网址在线观看 | 亚洲欧美日韩久久 | 亚洲精品在线免费 | 男人天堂网址 | av色站| 91久久精品一区二区二区 | 国产成人一区二区三区 | 久久久高清 | 久久精品中文 | 国产免费看 | 国产成人精品亚洲日本在线观看 | 国产精品69毛片高清亚洲 | 久久久蜜桃| 婷婷综合激情 | 青青草免费在线视频 | 久久久久久国模大尺度人体 | 亚洲激情在线观看 | 亚洲va在线va天堂va狼色在线 | 人人干在线| 国产欧美在线一区二区 | 毛片a区| 欧美一级片免费看 | 国产精品久久久乱弄 | 欧美中文字幕一区二区三区亚洲 |