指令 sed -e 's/\(~\).*\(~\)// 對文字檔執行什麼動作?

指令 sed -e 's/\(~\).*\(~\)// 對文字檔執行什麼動作?

指令 sed -e 's/\(~\).*\(~\)// 對文字檔執行什麼操作?我不明白。我在工作中遇到過它。

答案1

該命令(如果在末尾添加缺少的單引號)會將文件的所有行打印到終端,但如果~任何行上至少有兩個(波形符)字符,則第一個和最後一個之間的位~將通過s中的替換指令( )來刪除sed

例子:

$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is  THE END

\(不需要\)(因為表達式中沒有使用反向引用),也-e可以省略 (因為只有一個表達式),因此該指令相當於

sed 's/~.*~//' file

所以,它不文件本身的任何內容,但它會讀取並修改文件的內容,產生經過處理的文本,然後您可以使用重定向 ( sed ... >newfile) 將其保存在新文件中。


反向引用可以在此命令中使用,如下所示:

sed 's/\(~\).*\1//' file

即,匹配 a ~,然後匹配一些其他文本,然後匹配我們在第一組中匹配的相同內容\(...\)(波浪號)。但這並不能節省打字時間,也不能使命令更易於維護或理解,因此它不會對sed 's/~.*~//' file.

相關內容