![需要有关 sed 命令的帮助](https://linux22.com/image/183053/%E9%9C%80%E8%A6%81%E6%9C%89%E5%85%B3%20sed%20%E5%91%BD%E4%BB%A4%E7%9A%84%E5%B8%AE%E5%8A%A9.png)
我需要帮助输入单个sed
命令来搜索下面 2000 年至 2009 年(含)之间发布的游戏。我尝试过 (/) 搜索,但它对我不起作用。
1 Wii Sports Wii 2006 Nintendo 41.36
2 Super Mario Bros. NES 1985 Nintendo 29.08
3 Duck Hunt NES 1985 Nintendo 26.93
4 Tetris GB 1989 Nintendo 23.20
5 Mario Kart Wii Wii 2008 Nintendo 15.91
6 Wii Sports Resort Wii 2009 Nintendo 15.61
7 Kinect Adventures! X360 2010 MS Game Studios 15.09
8 New Super Mario Bros. Wii Wii 2009 Nintendo 14.53
9 Wii Play Wii 2007 Nintendo 13.96
10 Super Mario World SNES 1991 Nintendo 12.78
11 New Super Mario Bros. DS 2006 Nintendo 11.28
12 Pokémon Red/Green/Blue GB 1998 Nintendo 11.27
13 Super Mario Land GB 1989 Nintendo 10.83
14 Call of Duty: Black Ops X360 2010 Activision 9.76
15 Mario Kart DS DS 2005 Nintendo 9.71
16 Super Mario Bros. 3 NES 1990 Nintendo 9.54
17 Grand Theft Auto:San Andreas PS2 2004 Rockstar Games 9.43
18 Call of Duty: Modern Warfare X360 2011 Activision 9.07
19 Grand Theft Auto V X360 2013 Rockstar Games 9.06
答案1
更好用awk对于这个作为文本处理工具的用例,同时您可以使用上面的内容来搜索您要查找的内容(请注意,这仅适用于您的列表):
sed -n '/200[0-9]/p' file
-n :将抑制完整的文件输出
p命令:用于打印匹配的模式
和AWK(假设列由制表符分隔):
awk -F '\t' '{if($4 >= 2000 && $4 <= 2009 ) {print $0}}' file
答案2
如果这些是固定宽度字段,并且所有字符的宽度均为 1 并且只有 1(没有零宽度或双宽度字符,也没有 TAB 等控制字符),您可以这样做:
<your-file grep -E '^.{38}200[0-9] '
假设年份字段从第 39 列开始。
也就是说,查找^
以38
字符 ( .
) 开头、后跟 200、0 到 9 范围内的字符和空格的行。
答案3
我建议使用 grep,而不是使用 sed。
在终端中运行: cat YOURFILE | grep 年份
将 YOURFILE 替换为您的文件名。将 YEAR 替换为您想要查看当年发布的所有游戏的年份。
希望这可以帮助!