Unix尾部和grep等效于Windows

时间:2015-06-30 11:14:20

标签: powershell batch-file

我们有以下unix命令:

/usr/bin/tail -n 1 %{path} | grep --silent -F "%{message}" && rm -f %{path}%

此:

  1. /usr/bin/tail -n 1 %{path}获取path变量引用的文件中的最后一行

  2. | grep --silent -F "%{message}"将输出传递给另一个命令grep,该命令检查上一个命令的输出是否等于message的值

  3. && rm -f %{path}%如果值相等,则删除path所提及的文件
  4. 以上行位于配置文件中,允许对底层操作系统进行调用。

    我想复制windows上的functionalirty。 我试过这个:

    command => 'powershell -Command "& {Get-Item $args[0] | ? { (Get-Content $_ -Tail 1).Contains($args[1]) }| Remove-Item -Force}" "'%path%'" "'%message%'"'
    

    抛出此错误:

    Error: Expected one of #, {, } at line 15, column 131 (byte 498)
    

    第15行是配置文件中包含上述内容的行。

    由于

2 个答案:

答案 0 :(得分:2)

PowerShell解决方案:

$path    = 'C:\path\to\your.txt'
$message = 'message'

Get-Item $path | ? { (Get-Content $_ -Tail 1).Contains($message) } | Remove-Item -Force

如果要从命令行运行它,请按以下方式调用它:

powershell -Command "& {Get-Item $args[0] | ? { (Get-Content $_ -Tail 1).Contains($args[1]) } | Remove-Item -Force}" "'C:\path\to\your.txt'" "'message'"

答案 1 :(得分:1)

您可以使用tailhead.bat(纯批处理脚本实用程序)来显示文件的持续时间/文字行。而不是Grep您可以使用findstr或{{1 }}:

find