我有一个我要过滤的单词列表:只有那些以连字符开头或结尾的单词,而不是那些在中间带有连字符的单词。也就是说,过滤条目如:“a-”或“-cefalia”而不是“castellano-manchego”。
我尝试了很多选项和最相似的东西,我发现它是grep -E '*\-' minilemario.txt
但是它会过滤所有连字符。你能帮我解决一下吗?
a
a-
aarónico
aaronita
amuzgo
an-
-án
ana
-ana
ana-
anabaptismo
anabaptista
blablá
bla-bla-bla
blanca
castellano
castellanohablante
castellano-leonés
castellano-manchego
castellanoparlante
cedulario
cedulón
-céfala
cefalalgia
cefalálgico
cefalea
-cefalia
cefálica
cefálico
cefalitis
céfalo
-céfalo
cefalópodo
cefalorraquídeo
cefalotórax
cefea
ciabogar
cian
cian-
cianato
cianea
cianhídrico
cianí
ciánico
cianita
ciano-
cianógeno
cianosis
cianótico
cianuro
ciar
ciática
ciático
zoo
zoo-
zoófago
答案 0 :(得分:4)
使用grep
,说:
grep -E '^-|-$' filename
获取以-
开头和结尾的单词。和
grep -v -E '^-|-$' filename
排除以-
开头和结尾的字词。
^
和$
分别表示行的起点和终点。您使用'*\-'
来匹配-
之后的任何内容(它不会说-
位于该行的末尾)。
答案 1 :(得分:0)
这是一个仅限bash的解决方案。请参阅评论了解详情:
#!/usr/bin/env bash
# Assign the first argument (e.g. a textfile) to a variable
input="$1"
# Bash 4 - read the data line by line into an array
readarray -t data < "$input"
# Bash 3 - read the data line by line into an array
#while read line; do
# data+=("$line")
#done < "$input"
# For each item in the array do something
for item in "${data[@]}"; do
# Line starts with "-" or ends with "-"
[[ "$item" =~ ^-|-$ ]] && echo "$item"
done
这将产生以下输出:
$ ./script input.txt
a-
an-
-án
-ana
ana-
-céfala
-cefalia
-céfalo
cian-
ciano-
zoo-