我有一个学生列表,我已将其保存到文本文件students.txt
。
John Doe Marketing Junior B
Betty Metty Engineering Junior A
James Names Nursing Sophomore B
Bob Nob History Freshman B
Hope Nope Engineering C
它可能非常简单,但由于我是shell脚本的初学者,所以sed模式命令会打印出人物,只有名字和姓氏,其中有一个A in他们的专业(字母@结尾)?
如果您可以链接一个有用的网站,以获取与列表相关的sed模式搜索规则,这些规则也很棒。
使用vim,Ubuntu 16.04
答案 0 :(得分:3)
awk '$5=="A"{print $1, $2}' file
Betty Metty
awk '$5=="A" && $3=="Engineering"{print $1, $2}' file
答案 1 :(得分:1)
$ cat ip.txt
John Doe Marketing Junior B
Betty Metty Engineering Junior A
James Names Nursing Sophomore B
Bob Nob History Freshman B
Hope Nope Engineering C
$ sed -nE '/A$/ s/^(\S+\s+\S+).*/\1/p' ip.txt
Betty Metty
-n
默认情况下不打印行-E
使用扩展正则表达式/A$/
在行尾<{li>匹配A
s/^(\S+\s+\S+).*/\1/p
捕获前两个以空格分隔的非空格字符序列,省略其余行并打印此修改后的行使用GNU sed
进行就地编辑:
sed -i -nE '/A$/ s/^(\S+\s+\S+).*/\1/p' ip.txt
使用vim
:v/A$/d | s/\v^(\S+\s+\S+).*/\1/
v/A$/d
删除所有不以A
|
添加另一个命令s/\v^(\S+\s+\S+).*/\1/
使用非常神奇的模式\v
来减少所需的\
,就像-E
选项答案 2 :(得分:0)
使用sed查找匹配项和awk只打印所需的字段:
sed -n -e '/A$/p' input_file | awk '{print $1 $2}'
sed -n默认表示不打印任何内容。 /A$/p
表示打印最后一个字符为&#39; A&#39;。