substring windows命令行

时间:2018-06-15 20:30:39

标签: command-line cmd

我试图根据文件中的固定位置从文本文件的每一行获取子字符串。我想用命令行实现这一点。

我的文件看起来像这样:

45testing45
46testing46
47testing47
48testing48
49testing49
50testing50
51testing51
52testing52
53testing53

我尝试了以下命令行:

For -F %i in (inputFile.txt) do (SET _line=%i SET _chars=%_line:~10,2% @echo _chars > outputFile.txt)

但结果是outputFile.txt被创建但是空了,当我在命令提示符中点击SET时,我看到_line变量就是这样_line = 53testing53 SET _chars =%_ line:~10,2%@echo _chars > outputFile.txt) 我不明白为什么,我想我错过了DO部分的分隔符,以便我可以分开不同的SET命令。

你能帮我把新文件的最后2位数输入新的输出文件吗?我已经下载了Cygwin,所以我也对Unix命令开放,但我不明白如何使用sed或awk提取文件每一行的固定长度子字符串。

提前致谢。

3 个答案:

答案 0 :(得分:1)

这可能对您有用:

(For /F %A In (inputFile.txt) Do @Set "_=%A"&Call Echo ^%_:~-2^%)>outputFile.txt

答案 1 :(得分:0)

你有一些拼写错误,我把它放到一个脚本中。

For /F %%i in (inputFile.txt) do (CALL :DisplaySubString %%i)
GOTO :EOF

:DisplaySubString
SET _line=%1 
SET _chars=%_line:~9,2% 
@echo %_chars% >> outfile.txt

一个问题是你试图在()内处理变量。您需要使用DelayedExpansion来执行此操作。

为了解决这个问题,我在名为:DisplaySubString的.cmd文件中创建了一个“子例程”。

您的索引关闭了一个,10 - > 9

@echo %_chars%错过了%

您必须使用>>代替>来附加到文件中。

答案 2 :(得分:0)

实际上,如果你想用sed(see this repo for the details)解决这个问题,你在Windows中并不需要Cygwin。在PATH变量中下载并放置sed二进制文件后,您可以在命令提示符下键入命令:

sed -r "s/.*([0-9]{2})/\1/" input.txt > output.txt

并且它已经完成了。您可以在线找到sed的手册页here。 纯cmd脚本:

@echo off
  setlocal enabledelayedexpansion
    set "f=C:\files\input.txt"
    >C:\files\output.txt (for /f %%i in (%f%) do (
      set "l=%%i"
      echo !l:~-2!
    ))
  endlocal
exit /b