使用 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/\(^.*[^a-z\r\n].*$\)//g' wordlist.txt
包括 \(
和 \)
。这些意味着真正的(即非转义的)圆括号。所以命令说找到以 (
开头并以 )
结尾的行,中间有一些其他字符,然后将其替换为空。将命令重写为 sed -r 's/^.*[^a-z\r\n].*$//g' wordlist.txt
应该会产生预期的效果。您也可以删除 \r\n
以提供 sed -r 's/^.*[^a-z].*$//g' wordlist.txt
。但是这些都不会与 Notepad++ 命令完全相同,因为它们会留下空行。所以你可能会发现命令 sed -r '/^.*[^a-z].*$/d' wordlist.txt
更接近你真正想要的。
以下正则表达式在 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/\(^.*[^a-z\r\n].*$\)//g' wordlist.txt
包括 \(
和 \)
。这些意味着真正的(即非转义的)圆括号。所以命令说找到以 (
开头并以 )
结尾的行,中间有一些其他字符,然后将其替换为空。将命令重写为 sed -r 's/^.*[^a-z\r\n].*$//g' wordlist.txt
应该会产生预期的效果。您也可以删除 \r\n
以提供 sed -r 's/^.*[^a-z].*$//g' wordlist.txt
。但是这些都不会与 Notepad++ 命令完全相同,因为它们会留下空行。所以你可能会发现命令 sed -r '/^.*[^a-z].*$/d' wordlist.txt
更接近你真正想要的。