使用sed从文件中选择特定项
谈到使用sed从文件中选择特定项,sed,Sed,谈到sed命令,我的Bruce Barnett向导就坐在我旁边,但有一件事一直困扰着我。对于文件,您是否可以使用sed对其进行过滤,以仅选择特定项目?例如,在以下文件中: alpha|november bravo|october charlie|papa alpha|quebec bravo|romeo charlie|sahara 是否可以设置一个仅返回bravos的命令,如: bravo|october bravo|romeo
sed
命令,我的Bruce Barnett
向导就坐在我旁边,但有一件事一直困扰着我。对于文件,您是否可以使用sed
对其进行过滤,以仅选择特定项目?例如,在以下文件中:
alpha|november
bravo|october
charlie|papa
alpha|quebec
bravo|romeo
charlie|sahara
是否可以设置一个仅返回bravo
s的命令,如:
bravo|october
bravo|romeo
对于sed:
sed '/^bravo|/!d' filename
或者,使用grep(因为它是为这种东西设计的):
或者使用awk,它可以很好地处理表格数据
awk -F '|' '$1 == "bravo"' filename
前两个使用正则表达式,选择与之匹配的行。在^bravo |
中,^
匹配行首和bravo |
文本字符串bravo |
,因此选择以bravo |
开头的所有行
awk方式通过字段分隔符|
拆分行,并选择第一个字段为bravo
的行
您还可以将正则表达式与awk一起使用:
awk '/^bravo|/' filename
…但我认为在这种情况下,这并没有发挥awk的优势。对于sed:
sed '/^bravo|/!d' filename
或者,使用grep(因为它是为这种东西设计的):
或者使用awk,它可以很好地处理表格数据
awk -F '|' '$1 == "bravo"' filename
前两个使用正则表达式,选择与之匹配的行。在^bravo |
中,^
匹配行首和bravo |
文本字符串bravo |
,因此选择以bravo |
开头的所有行
awk方式通过字段分隔符|
拆分行,并选择第一个字段为bravo
的行
您还可以将正则表达式与awk一起使用:
awk '/^bravo|/' filename
…但我不认为这会发挥awk在这种情况下的优势。另一个使用
sed的解决方案:
sed -n '/^bravo|/p' filename
-n
选项=>默认情况下不打印。
如果行以bravo |
开头,则将其打印(p
)另一个带有sed的解决方案:
sed -n '/^bravo|/p' filename
-n
选项=>默认情况下不打印。
如果行以bravo |
开头,则使用sed以两种方式(至少)打印(p
)
删除不需要的线路
sed '/^bravo\|/ !d' YourFile
只打印想要的行
sed -n '/^bravo\|/ p' YourFile
- 如果没有其他约束或操作发生,则两者都是相同的,grep更好李>
- 如果之后会有一些操作,它可能会改变性能,其中
d
直接循环到下一行,并且将打印p
,然后继续执行以下操作。
- 注意,GNU-sed需要管道的逸出,而不是posix版本
2路(至少)带sed
删除不需要的线路
sed '/^bravo\|/ !d' YourFile
只打印想要的行
sed -n '/^bravo\|/ p' YourFile
- 如果没有其他约束或操作发生,则两者都是相同的,grep更好李>
- 如果之后会有一些操作,它可能会改变性能,其中
d
直接循环到下一行,并且将打印p
,然后继续执行以下操作。
- 注意,GNU-sed需要管道的逸出,而不是posix版本
哦,我还以为你第一次用的是sed-n'/bravo/p'
。。这就是为什么我给出了我的答案,希望有一个替代方案。我忽略了。。。你首先,+1:)@hek2mgl我一开始在sed解决方案中有一个输入错误,没有立即看到它;我知道sed和awk都很强大,但我对sed已经够麻烦了!不过谢谢,信息总是很受欢迎的。带管道的grep也不会返回空行或出现问题(在我的aix上不会返回任何内容)?@NeronLeVelu否。如果
被转义,它会的,就像在sed中一样(或者如果使用egrep
,就像在sed
中使用扩展的regex语法)。哦,我还以为你第一次使用了sed-n'/bravo/p'
。。这就是为什么我给出了我的答案,希望有一个替代方案。我忽略了。。。你首先,+1:)@hek2mgl我一开始在sed解决方案中有一个输入错误,没有立即看到它;我知道sed和awk都很强大,但我对sed已经够麻烦了!尽管如此,还是要感谢大家。带管道的grep也不会返回空行或出现问题(在我的aix上不会返回任何内容)?@NeronLeVelu No。如果
被转义,就像在sed中一样(或者如果您使用egrep
,就像在sed
中使用扩展的regex语法一样)。简单明了-谢谢!哦,谢谢你也整理了我的问题!!简单明了-谢谢!哦,谢谢你也整理了我的问题!!