Regex 使用Sed删除包含非字母的行

Regex 使用Sed删除包含非字母的行,regex,bash,sed,Regex,Bash,Sed,以下正则表达式在记事本++中按预期工作: ^.*[^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 li

以下正则表达式在记事本++中按预期工作:

^.*[^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 -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 -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 -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是一个流编辑器。它一次处理一行输入。这意味着搜索和替换命令等只能看到当前行。相比之下,记事本++将整个文件存储在内存中,因此其搜索表达式可以跨越两行或更多行

您的命令
sed-r's/\(^.*[^a-z\r\n].$\)/g'wordlist.txt
包括
\(
\)
。这是指真正的圆括号。因此,该命令表示查找一行,该行以
开头,以
结尾)
之间有一些其他字符,并将其替换为空。将命令重写为
sed-r's/^.[^a-z\r\n].$///g'wordlist.txt
应该会达到预期效果。您还可以删除
\r\n
以提供
sed-r/^.*[^a-z].$//g'wordlist.txt
。但这两个命令都不会与Notepad++命令完全相同,因为它们会留下空行。因此,您可能会发现命令
sed-r'/^.[^a-z].$/d'wordlist.txt更接近您真正想要的内容。

两件事:

Sed是一个流编辑器。它一次处理一行输入。这意味着搜索和替换命令等只能看到当前行。相比之下,记事本++将整个文件存储在内存中,因此其搜索表达式可以跨越两行或更多行

您的命令
sed-r's/\(^.*[^a-z\r\n].$\)/g'wordlist.txt
包括
\(
\)
。这是指真正的圆括号。因此,该命令表示查找一行,该行以
开头,以
结尾)
之间有一些其他字符,并将其替换为空。将命令重写为
sed-r's/^.[^a-z\r\n].$///g'wordlist.txt
应该会达到预期效果。您还可以删除
\r\n
以提供
sed-r/^.*[^a-z].$//g'wordlist.txt
。但这两个命令都不会与Notepad++命令完全相同,因为它们会留下空行。因此,您可能会发现命令
sed-r'/^.[^a-z].$/d'wordlist.txt更接近您真正想要的内容。

两件事:

Sed是一个流编辑器。它一次处理一行输入。这意味着搜索和替换命令等只能看到当前行。相比之下,记事本++将整个文件存储在内存中,因此其搜索表达式可以跨越两行或更多行

您的命令
sed-r's/\(^.*[^a-z\r\n].$\)/g'wordlist.txt
包括
\(
\)
。这是指真正的圆括号。因此,该命令表示查找一行,该行以
开头,以
结尾)
之间有一些其他字符,并将其替换为空。将命令重写为
sed-r's/^.[^a-z\r\n].$///g'wordlist.txt
应该会达到预期效果。您还可以删除
\r\n
以提供
sed-r/^.*[^a-z].$//g'wordlist.txt
。但这两个命令都不会与Notepad++命令完全相同,因为它们会留下空行。因此,您可能会发现命令
sed-r'/^.[^a-z].$/d'wordlist.txt更接近您真正想要的内容。

两件事:

Sed是一个流编辑器。它一次处理一行输入。那个