我正在尝试编写一个Bash脚本,该脚本将读取一个文本文件,并在新行上提取后面跟着逗号的每个单词。我尝试使用grep
,但它会打印出包含逗号的整行,并且awk
遇到了同样的问题。我已经检查了grep的manage,但它似乎更侧重于标志而不是语法。这是一个普通的.txt文件,而不是CSV,只有逗号适合普通的英语语法。谁能告诉我如何设置这个脚本?
例如,如果文本文件包含动物列表,则如下:
兽医诊所治疗以下动物:狗,猫和鸟
脚本会显示:
dogs,
cats,
答案 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
工作原理: