有没有办法在Windows命令行模拟*nix中的tail命令?我有一个文件,想要一种方式来剪切掉前n行的文本。例如:
D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt
D:\>type result.txt
line two
line three
有没有办法在Windows命令行模拟*nix中的tail命令?我有一个文件,想要一种方式来剪切掉前n行的文本。例如:
D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt
D:\>type result.txt
line two
line three
如果您安装了Windows PowerShell(我认为它从XP开始就包含在内),您可以直接从cmd.exe运行:
Head命令:
powershell -command "& {Get-Content *filename* -TotalCount *n*}"
尾部命令:
powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"
或者,直接使用 PowerShell:
Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*
更新
PowerShell 3.0 (Windows 8及更高版本)添加了带有别名Last
的Tail
命令。
还添加了Head
和First
别名到TotalCount
。
因此,命令可以重新编写为
Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*
tail
而是像head
吗? - blakeoftGet-Content
现在拥有 tail 命令。例如,Get-content -Tail 5 file.txt
将打印出 file.txt 的最后五行。顺便说一句感谢你更新你的答案。 - blakeoft没有完全的等价物。但是存在一个名为“more”的本机DOS命令,它有一个+n选项,可以在第n行后开始输出文件:
DOS提示符:
C:\>more +2 myfile.txt
上面的命令将输出第2行后的所有内容。Unix控制台:
root@server:~$ head -2 myfile.txt
上述命令将只打印文件的前两行。
tail
命令是从文件末尾开始计数的。因此,tail -2
将会打印出最后两行。 - ADTChead -n -2
和 head -n 2
,它们是不同的。但是在 tail 中,后者不存在。 - nl-xtail
命令也支持通过在数字前加上 +
来指定从文件顶部开始的行数。因此,针对上面的示例,要获取第二行之后的所有内容(例如第三行及其以下行),请使用 tail -n +3
命令。 - Ken Bellowsmore /e filename.txt P n
n是要显示的行数。速度很快,与head
命令完全相同。
PowerShell:
Get-Content C:\logs\result.txt -Tail 10
Get-Content C:\logs\result.txt -wait (monitor the tail)
这是一种极其简单粗暴的方法,但如果你想要仅仅查看一个巨大文件的格式、头部等信息,并且正在寻找解决方案,那么你可以将'more'输出重定向到新文件中并快速使用CTRL-C。输出行不能被精确地控制,你很可能会在输出的某一行中断,但这是获取原本无法使用的文件的一种廉价方法。
示例:
C:\more test.csv > test.txt
^C
C:\more test.txt
line 1
line 2
etc......
C:\
好的,这样做可以实现目的,但速度与外观大致相同(大约是O(n*m),其中n是要显示的行数,m是文件中的总行数):
for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b
这里的“10”是您想要打印的行数,“filename”是文件的名称。
(expr) > out.txt
- 否则您只会得到最后一行。或者附加 - expr >> out.txt
。 - c z您还可以使用Git bash,其中头和尾也被模拟了。
Get-content -Tail n file.txt
是PowerShell中与Linux中的tail
最相似的命令。
上面建议的Get-Content *filename* | Select-Object -last *n*
会加载/解析整个文件。不用说,对于我的10GB日志文件来说这是不可行的... -Tail
选项从文件末尾开始读取。
head
命令不是只显示前 n 行而不是忽略它们吗? - Joeytail
的行为,但标题却说的是head
。 - M.M*[call to tail]* 2 > result.txt
,如果是这样,它等同于tail
,还是*[call to tail]* 1 > result.txt
,如果是后者,则不等同。 - sancho.s ReinstateMonicaCellio