簡體   English   中英

使用Sed刪除包含非字母的行

[英]Using Sed to delete lines which contain non alphabets

下面的正則表達式可以在Notepad ++中正常工作:

^.*[^a-z\r\n].*$

但是,當我嘗試將其與sed一起使用時,它將無法正常工作。

sed -r 's/\(^.*[^a-z\r\n].*$\)//g' wordlist.txt

您可以使用:

sed -i '/[^a-z]/d' wordlist.txt

這將刪除具有非字母字符的每一行(無需指定換行符)

編輯:

您正則表達式不起作用,因為您嘗試匹配

( bracket
^ beginning of line
...
$ end of line
) bracket

由於沒有括號,因此沒有行的開頭,因此正則表達式根本不匹配任何內容。

注意,也是

s/\(^.*[^a-z\r\n].*$\)//g'

不會刪除一行,而是將其替換為空白行

編輯2:

請注意,在sed中使用-r標志更改\\(\\)的行為而沒有-r標志它們是組指示符,但是在具有-r標志的情況下它們只是括號...

兩件事情:

Sed是流編輯器。 它一次處理一行輸入。 這意味着搜索和替換命令等只能看到當前行。 相比之下,Notepad ++將整個文件存儲在內存中,因此其搜索表達式可以跨越兩行或更多行。

您的命令sed -r 's/\\(^.*[^az\\r\\n].*$\\)//g' wordlist.txt包含\\(\\) 這些是指真實的(即非轉義的)圓括號。 因此,該命令說找到一條以(結束於)和其他字符之間的行,然后將其替換為空。 將命令重寫為sed -r 's/^.*[^az\\r\\n].*$//g' wordlist.txt應該具有所需的效果。 您也可以刪除\\r\\n以提供sed -r 's/^.*[^az].*$//g' wordlist.txt 但是,它們都不會與Notepad ++命令完全相同,因為它們將留下空白行。 因此,您可能會發現命令sed -r '/^.*[^az].*$/d' wordlist.txt與您真正想要的更接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM