我想通过将默认选项grep
应用于-i
来使grep
不区分大小写。 PowerShell中的标准方法是使用函数:
function grep {
env grep -i $args
}
Grep
也接受通过标准输入(cat file | grep search
)进行搜索的文字。
实现这一目标的一个简单方法是:
function grep($search) {
$input | env grep -i $search
我可以将这两个结合起来,以便函数grep
知道它是在管道中调用的吗?或者有更简单的方法吗?
答案 0 :(得分:0)
我将假设env grep
意味着您拥有一个带有grep.exe
的Unix -ish 环境。在一个可以处理参数和管道输入的函数中包装它的正确方法看起来像这样:
function grep {
[CmdletBinding(DefaultParameterSetName='content')]
Param(
[Parameter(Position=0,Mandatory=$true)]
[string]$Search,
[Parameter(
ParameterSetName='content',
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true
)]
[string]$InputObject,
[Parameter(
ParameterSetName='file',
Position=1,
Mandatory=$true
)]
[string[]]$File
)
Begin {
$grep = & env grep
}
Process {
if ($PSCmdlet.ParameterSetName -eq 'file') {
& $grep -i $Search $File
} else {
$InputObject | & $grep -i $Search
}
}
}
答案 1 :(得分:0)
我终于明白了。这可能只能以交互方式工作,而不能在脚本中工作 - 因为$input
- 但是别名通常被认为是一种交互式技术(尽管不一定为命令提供标准选项)。
在这个例子中,我使用ag
- Silver Searcher - 因为它不区分大小写(实际上是“case-smart”),递归并默认启用颜色。如果没有给出路径,它会搜索当前目录(这是第一个显示函数按预期工作的“测试用例”)
function ag {
if ($input.Count) {
$input.Reset()
$input | env ag -i $args
}
else {
env ag --depth -1 --hidden --skip-vcs-ignores $args
}
}