如何使用perl one liner使用正则表达式将一行拆分为多行?

如何使用perl one liner使用正则表达式将一行拆分为多行?,perl,Perl,如何使用perl one liner将一行拆分为多行 输入: AAAA | BBBB | CCCCCCCCCCC | 19999AAA | AAA 输出: AAAA BBBB CCCCCCCCCCC 19999AAA AAA 使用以下类似的方法: perl -pe 's/ \| /\n/g' perl -nE 'say for split / \| /' 一种方法是用换行符替换空格和管道分隔符 echo "your input" | perl -pe 's/ \| /\n/g' 您可以在

如何使用perl one liner将一行拆分为多行

输入:

AAAA | BBBB | CCCCCCCCCCC | 19999AAA | AAA
输出:

AAAA
BBBB
CCCCCCCCCCC
19999AAA
AAA

使用以下类似的方法:

perl -pe 's/ \| /\n/g'
perl -nE 'say for split / \| /'

一种方法是用换行符替换空格和管道分隔符

echo "your input" | perl -pe 's/ \| /\n/g'
您可以在此处执行拆分并连接字符串

echo "your input" | perl -ne 'print join("\n", split / \| /, $_)'

注意:我会很安全地使用
\s*\\\s*
之前和之后匹配多个空格。

既然您要求的是一行,我想您不会试图将其放入现有的perl脚本中,那么为什么不使用普通的shell命令来实现这一点:

tr -s '| ' '[\n*]'
这会将第一个集合中的任何字符序列替换为换行符。独特的语法
[\n*]
确保这适用于任何符合POSIX的
tr
。对于GNU或BSD
tr
,这种更简单的语法也应该适用:

tr -s '| ' '\n'
Perl本身也可以做到这一点:

perl -pe 'tr/ |/\n/s'

我不确定我是否理解这个问题。是否只想用换行符替换竖线字符?例如,
s/\\\124;/\ n/g
?始终使用//作为split的第一个参数(除了
split'
的特殊情况),这样您就不会忘记它始终是一个正则表达式。您的拆分失败。在两个示例中,您都需要反斜杠。这是我从mobile发布未经测试的内容所应得的:-)谢谢这两个,我编辑了。您的上一个解决方案不会消除所有空格。这真的是太复杂了。你的答案虽然复杂,但帮助我修复了我的连接-拆分-一行。。。