Select 使用 sed 的文件中的特定项目

Select specific items from a file using sed

sed 命令方面,我是一个大三学生,我的 Bruce Barnett 向导就坐在我旁边,但有一件事一直困扰着我。对于一个文件,您能否仅使用 sed 到 select 过滤特定项目?例如,在以下文件中:

    alpha|november
    bravo|october
    charlie|papa
    alpha|quebec
    bravo|romeo
    charlie|sahara

是否可以将命令设置为 return 只有 bravo,例如:

    bravo|october
    bravo|romeo

使用 sed:

sed '/^bravo|/!d' filename

或者,使用 grep(因为它是为这些东西而生的):

grep '^bravo|' filename

或使用 awk,它非常适合表格数据,

awk -F '|' ' == "bravo"' filename

前两个使用正则表达式,选择匹配它的那些行。在 ^bravo| 中,^ 匹配行的开头和 bravo| 文字字符串 bravo|,因此这会选择所有以 bravo|.[=21 开头的行=]

awk 方法通过字段分隔符 | 拆分行并选择第一个字段为 bravo.

的行

您也可以在 awk 中使用正则表达式:

awk '/^bravo|/' filename

...但我不认为这在这种情况下发挥了 awk 的优势。

另一个解决方案sed

sed -n '/^bravo|/p' filename

-n 选项 => 默认不打印。 如果行以 bravo| 开头,则打印它 (p)

2 种方式(至少)使用 sed

删除不需要的行

sed '/^bravo\|/ !d' YourFile

只打印需要的行

sed -n '/^bravo\|/ p' YourFile
  • 如果没有其他约束或操作发生,则两者相同并且 grep 更好。
  • 如果之后会有一些动作,它可能会改变性能,其中 d 循环直接到下一行并且 p 将打印然后继续下面的动作。
    • 注意 GNU sed 需要管道转义,posix 版本
    • 不需要