在谈到sed
命令时,我非常吝啬,我的Bruce Barnett
指南就在我身边,但有一件事让我感到不安。使用文件,您可以使用sed
过滤它以仅选择特定项目吗?例如,在以下文件中:
alpha|november
bravo|october
charlie|papa
alpha|quebec
bravo|romeo
charlie|sahara
是否可以将命令设置为仅返回bravo
s,例如:
bravo|october
bravo|romeo
答案 0 :(得分:3)
使用sed:
sed '/^bravo|/!d' filename
或者,使用grep(因为它是为这些东西制作的):
grep '^bravo|' filename
或使用awk,它非常适合表格数据,
awk -F '|' '$1 == "bravo"' filename
前两个使用正则表达式,选择与之匹配的那些行。在^bravo|
中,^
匹配行的开头,bravo|
匹配文字字符串bravo|
,因此这将选择以bravo|
开头的所有行。
awk方法将字段分割为字段分隔符|
,并选择第一个字段为bravo
的行。
您还可以使用带有awk的正则表达式:
awk '/^bravo|/' filename
...但我认为这不会影响awk在这种情况下的优势。
答案 1 :(得分:2)
sed
的另一种解决方案:
sed -n '/^bravo|/p' filename
-n
option =>默认情况下不打印。
如果行以bravo|
开头,请将其打印(p
)
答案 2 :(得分:1)
2路(至少)与sed
删除不需要的行
sed '/^bravo\|/ !d' YourFile
仅打印想要的行
sed -n '/^bravo\|/ p' YourFile
d
直接循环到下一行并且将打印p
的性能,然后继续执行以下操作。