说我有this text file。我想抓住其中有电影的线条,根据标题匹配标题,打印和排序。我完成了大部分工作:
File.open("features/sort_movie_list.feature","r").each {|line| puts [$1] if line =~ /\|\s+([A-Z0-9][a-zA-Z0-9: ]+)\s+\|/}
但我不知道如何从那里排序。我通过grep
获得了一些方法:
egrep -o "\|\s([A-Z0-9][A-Za-z0-9: ]+)\s+\|" sort_movie_list.feature
但不确定如何仅打印括号内的比赛。你会怎么做,以便输出如下?
2001: A Space Odyssey
Aladdin
Amelie
Chicken Run
...
答案 0 :(得分:1)
在ruby示例中,您可以将它们填充到数组中,对数组进行排序并将其打印出来。
使用egrep,你可以将结果传递给sort:
egrep -o "\|\s([A-Z0-9][A-Za-z0-9: ]+)\s+\|" sort_movie_list.feature | sort
答案 1 :(得分:1)
给定的正则表达式不会用逗号(','),点('。')或其他奇怪的东西(如德语变形金刚'ä',感叹号(“火星攻击!”!!))捕捉电影标题。
因此,我会利用给定的格式并假设管道不会出现在电影片目列表中。
因此,要么分割文件,管道(“|”)是字段分隔符,要选择第二个字段,如:
grep "|" movies.txt | cut -f 2 -d"|" | sort
(grep "|"
是省略没有电影的行,否则cut -f 2 -d "|" movies.txt
会这样做。
或在红宝石中使用某些内容
line.split("|")[1]
请注意,在这两种情况下,您可以在之后删除空格。
答案 2 :(得分:0)
好的,我现在已经想到了Ruby。感谢David建议使用数组。
movie_titles = []
File.open("features/sort_movie_list.feature","r").each {|line| movie_titles.push($1.strip) if line =~ /\|\s+([A-Z0-9][a-zA-Z0-9: ]+)\s+\|/}
puts movie_titles.sort
如果某人有更有效/简洁的答案,我总是愿意学习更多。