编写一个Bash脚本,将逗号分隔的每个单词从文本文件中拉出来

时间:2016-02-17 00:44:55

标签: bash shell

我正在尝试编写一个Bash脚本,该脚本将读取一个文本文件,并在新行上提取后面跟着逗号的每个单词。我尝试使用grep,但它会打印出包含逗号的整行,并且awk遇到了同样的问题。我已经检查了grep的manage,但它似乎更侧重于标志而不是语法。这是一个普通的.txt文件,而不是CSV,只有逗号适合普通的英语语法。谁能告诉我如何设置这个脚本?

例如,如果文本文件包含动物列表,则如下:

  

兽医诊所治疗以下动物:狗,猫和鸟

脚本会显示:

dogs,
cats,

3 个答案:

答案 0 :(得分:1)

看起来您需要了解grep的{​​{1}}参数(仅匹配)。如果你认为一个单词是由空格分隔的一系列字母,那么这个匹配就会:

-o

答案 1 :(得分:1)

如果您的grep版本支持-o开关,那么您可以使用它,否则这应该适用于大多数版本的awk:

awk '{ for (i = 1; i <= NF; ++i) if ($i ~ /^[[:alpha:]]+,$/) print $i }' file

循环浏览文件中的所有字段,并打印仅包含字母字符后跟逗号的字段。

如果你有GNU awk,那么你可以通过将RS设置为任意数量的空格字符来简化方法:

awk -v RS='\\s+' '/^[[:alpha:]]+,$/' file

答案 2 :(得分:0)

还有一个sed

#! /bin/sh
sed '
s/[^,]* //g
s/,[^,]*$/,/
s/,\(.\)/,\
\1/g
' <<EOF
The Veterinary clinic treats the following animals: dogs, cats, and birds
EOF

工作原理:

  1. 删除所有不包含逗号但后跟空格的内容。
  2. 删除行末尾逗号后面不包含逗号的所有内容。
  3. 用逗号和换行符替换不在行尾的所有逗号。