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 版本
不需要
在 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 版本 不需要