我想用非字母数字正则表达式分割输入文件中的每一行\W
,并打印输出文件中的所有分割块,如下所示:
输入文件:
www.wifi.in.ua
YI-HondBrychka
输出文件:
www
wifi
in
ua
YI
HondBrynchka
答案1
尝试使用该-o
标志,仅打印匹配的字符串,例如
$ cat <<HEREDOC | grep -Po '\w+'
www.wifi.in.ua
YI-HondBrychka
HEREDOC
www
wifi
in
ua
YI
HondBrychka
答案2
\W
使用 Perl(表达式源自该语言)将所有匹配项替换为换行符\W
:
$ perl -pe '$_ =~ s/\W/\n/g' <file
www
wifi
in
ua
YI
HondBrychka
或者,更符合问题的实际措辞:
$ perl -pe '$_ = join("\n", split(/\W/)) . "\n"' <file
www
wifi
in
ua
YI
HondBrychka
将 PCRE 表达\W
为 ERE[^[:alnum:]]
并使用 GNU awk
:
awk -v RS='[^[:alnum:]]' 1 file
The1
是 的缩写'{ print }'
,它将输入记录分隔符设置为任何\W
字符。然后将记录打印在单独的行上。
或者使用 GNU sed
:
sed 's/[^[:alnum:]]/\n/g' file
有了tr
,就变成了
$ tr -c '[:alnum:]' '\n' <file
www
wifi
in
ua
YI
HondBrychka
where-c
让它替换每个字符不是带有[:alnum:]
换行符的 .