[英]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.