使用sed从文件中选择特定项目

时间:2015-02-16 10:33:17

标签: sed

在谈到sed命令时,我非常吝啬,我的Bruce Barnett指南就在我身边,但有一件事让我感到不安。使用文件,您可以使用sed过滤它以仅选择特定项目吗?例如,在以下文件中:

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

是否可以将命令设置为仅返回bravo s,例如:

    bravo|october
    bravo|romeo

3 个答案:

答案 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
  • 如果没有其他约束或动作发生,两者都相同,grep更好。
  • 如果之后会有某些操作,则可能会更改d直接循环到下一行并且将打印p的性能,然后继续执行以下操作。
    • 请注意,GNU sed需要管道的转义,而不是posix版本