我有一个文本文件名coalitions.txt
,它看起来像这样:
Hadash left
Balad left
Raam_Taal left
Meretz left
Shas right
Habait_Hayehudi right
Haihud_Haleumi right
Yehadut_Hatorah right
Liberman right
Avoda left
Kadima center
Likud right
我想打印每行中最后一个单词的列表,没有重复。输出应为:
left
right
center
我知道我可以使用许多技术,例如tail
,但我想知道为什么我做的不起作用......我试过这个:
cat coalitions.txt | sed 's/.*[[:space:]]\+\([A-Z][a-z]\+\)/\1/' | sort | uniq
但它只是再次打印相同的列表,就像我的sed
不起作用一样。为什么会这样?
答案 0 :(得分:1)
使用正确的工具:
$ awk '!z[$NF]++ {print $NF}' coalitions.txt
left
right
center
答案 1 :(得分:0)
我认为sed并不认识+作为1或更多的元字符。你可以试试这个。
cat coalitions.txt | sed 's/.* \([A-Za-z][A-Za-z]*\)/\1/' | sort | uniq
答案 2 :(得分:0)
这里
[A-Z][a-z]\+
是A-Z之一,其次是a-z"中的一个或多个。您的意思可能是[A-Za-z]
,甚至更好,并且不易受区域变体[[:alpha:]]
的影响。
我只想提取每行的最后一个单词:
sed 's/.*[[:space:]]\([^[:space:]]*\)$/\1/' coalitions.txt | sort -u
无需单独的cat
,sort | uniq
与sort -u
相同。
答案 3 :(得分:0)
cat coalitions.txt | sed 's/.*\s\+\([A-Za-z]\+\)/\1/'
这似乎有效。由于我在Windows上,因此我必须使用\s
而不是[[:space:]]
。但即使我只是改变空间并尝试:
cat coalitions.txt | sed 's/.*\s\+\([A-Z][a-z]\+\)/\1/'
它不起作用。问题是字符范围必须使用逗号而不是单独的括号。 [A-Za-z]