我需要从一个文件中提取两个给定单词之间的文本。
文件格式如下:
some lines
<name>text1</name>
some lines
some lines
<name>text2</name>
some lines
<name>text3</name>
some more lines上述文件的预期输出:
谢谢。
发布于 2016-11-02 04:22:51
对于提供的样本数据来说,这应该是可行的:
for /f "tokens=2 delims=<>" %A in ('type test.txt ^| findstr "<name>"') do @echo %A如果在批处理脚本中使用此操作,请确保将%A更改为%%A。基本上,这将在包含<name>的行中运行,并使用delims=<>将行拆分为<和>字符,给出了name、text in between、/name。tokens=2只将%A设置为第二个字符串。
请记住,如果您在<name>之前有任何内容,这是行不通的。这可能会使事情变得更复杂,然后我建议在另一种语言中使用一些解析库。
此外,如果要提取的文本包含<或>,则此操作将无效。
发布于 2016-11-02 07:54:43
以下脚本提取作为命令行参数提供的文件的期望标记之间的文本:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Resolve command line arguments:
for %%F in (%*) do (
rem // Read a single line of text following certain criteria:
for /F "delims=" %%L in ('
findstr /R "^[^<>]*<name>[^<>][^<>]*</name>[^<>]*$" "%%~F"
') do (
set "LINE=%%L"
rem /* Extract the desired string portion;
rem the preceding `_` is inserted for the first token
rem never to appear empty to the `for /F` loop: */
setlocal EnableDelayedExpansion
for /F "tokens=3 delims=<>" %%K in ("_!LINE!") do (
endlocal
rem // Return found string portion:
echo(%%K
)
)
)
endlocal
exit /B只有在只有一个标记<name>,然后是一些文本本身不包含<和>,然后是一个标记</name>的情况下,这个字符串才能工作;这个字符串必须在一行上,并且可以前面或者后面跟着一些文本,这些文本本身不包含<和>。
发布于 2016-11-02 08:09:46
假设输入文件是input.txt。
这应该是可行的:
grep '<name>.*</name>' input.txt | sed -r 's/<name>(.*)<\/name>/\1/'grep发现sed行删除名称标记。
https://stackoverflow.com/questions/40371999
复制相似问题