Parsing Bash:将文本文件拆分为以非字母数字字符作为分隔符的单词

Parsing Bash:将文本文件拆分为以非字母数字字符作为分隔符的单词,parsing,bash,scripting,Parsing,Bash,Scripting,假设“textfile”包含以下内容: lorem$ipsum-is9simply the.dummy text%of-printing 你想把每个字都打印在一行上但是,单词不仅应该由空格定义,还应该由所有非字母数字字符定义。因此,结果应该如下所示: lorem ipsum is9simply the dummy text of printing 如何使用Bash shell实现这一点? 一些注意事项: 这不是一个家庭作业问题 更简单的情况是,单

假设“textfile”包含以下内容:

lorem$ipsum-is9simply the.dummy text%of-printing
你想把每个字都打印在一行上但是,单词不仅应该由空格定义,还应该由所有非字母数字字符定义。因此,结果应该如下所示:

 lorem
 ipsum  
 is9simply  
 the  
 dummy  
 text  
 of  
 printing
如何使用Bash shell实现这一点?



一些注意事项:

  • 这不是一个家庭作业问题

  • 更简单的情况是,单词只能由空格来确定,这很容易。只是写:

    将完成此操作,然后返回:

    对于按非字母数字字符拆分单词,我已经看到了使用IFS环境变量(以下链接)的解决方案,但我希望避免使用IFS,原因有两个:1)需要(我认为)将IFS设置为一长串非字母数字字符。2) 我觉得有点难看

  • 以下是我发现的两个相关问题

使用以下命令:

$awk-f splitter.awk因为(i=1;我很完美,这正是我想要的。谢谢!(很抱歉,我没有足够的声誉投票支持你的答案)@Sv1:你可能很快就会有很高的声誉。我投票支持你的问题是因为你很好地记录了你想要的东西以及你对它所做的所有研究。如果你有十进制数字呢?@Leyu:在保留的集合中添加额外的字符:
tr-cs'[:alnum:]+-“'\n'
。当然,这将允许通过句号、省略号和虚线等。但它也允许通过+1.23和-1.24e-23等。谢谢罗斯!这很酷,我一直想进入awk世界:)
for i in `cat textfile`; do echo $i; done;
 lorem$ipsum-is9simply
 the.dummy
 text%of-printing
tr -cs 'a-zA-Z0-9' '\n' <textfile
tr -cs '[:alnum:]' '\n' <textfile
$ awk -f splitter.awk < textfile

$ cat splitter.awk
{
  count0 = split($0, asplit, "[^a-zA-Z0-9]")
  for(i = 1; i <= count0; ++i) { print asplit[i] }
}