如何用shell提取文件中指定的字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用shell提取文件中指定的字符串相关的知识,希望对你有一定的参考价值。

cut命令

用法: cut 参数 文件名
说明:cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
参数:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
更多参数请参考:cut - -help
-b用法:
以字节为单位,指定相应的字节输出,由于一个英文字符只占用一个字节,所以对英文字符可以与-c等价,但是占用多个节编码的字符不适用,比如中文;
文件内容:

$ cat test.txt
1234567890
ABCDEFGHIJ
abcdefghij
hello wrold!

指定文件中每行的第1,3到7个字符输出:

cut -b 1,3-7 test.txt
134567
ACDEFG
acdefg
hllo w

-n表示1到前n个字符,n-表示从n开始的所有字符
打印前两个字符和从第8个开始的字符

$ cut -b -2,8- test.txt
12890
ABHIJ
abhij
herold!

中文:
文件内容:

$ cat test1.txt
我们好像在哪见过
你记得吗?
好像那是一个春天!
参考技术A 通过grep或者awk或者sed等命令工具

如何用bat抓取out文件中指定的数值并保存到新的txt文件中?

比如我有一个很多行的out文件 我只想要其中带有Sum of electronic and zero-point EnergiesSum of electronic and thermal Ehthalpies 两个字符串后面的数值并把这个数值存到新的一个txt文件中 如何实现?这是我的代码 #!/bin/bashecho.>get_energy.txtfor %%i in (*.out) do find "Sum of electronic and zero-point Energies" %%ifor %%i in (*.out) do find "Sum of electronic and thermal Ehthalpies" %%iecho "$i" >> get_energy.txtdone但好像不太对 求大神帮助

参考技术A 不清楚你的实际文件/情况,仅以问题中的样例/说明为据
复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行@echo off
rem 从一个文本文件内包含有指定字符串/关键字的行中提取/截取部分内容
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
set "outfile=xxx.txt"
type nul>"%outfile%"
for /f "delims=" %%a in ('dir /a-d/b *.out') do (
    echo;"%%a"
    for %%b in (
        "Sum of electronic and zero-point Energies"
        "Sum of electronic and thermal Enthalpies"
    ) do (
        for /f "tokens=1* delims==" %%c in ('type "%%a"^|find "%%~b"') do (
            for /f "tokens=*" %%e in ("%%d") do (
                echo;%%c=%%d
                >>"%outfile%" echo;%%e
            )
        )
    )
)
echo;%#% +%$%%$%/%@% %z%
pause
exit

本回答被提问者和网友采纳
参考技术B 您这个代码,怎么既有shell,又有bat?
bat脚本无法执行shell代码。所以有问题。

@echo off & title 提取数据 By 依梦琴瑶

echo 正在提权中。。
(for %%i in (*.out) do (
for %%a in ("Sum of electronic and zero-point Energies" "Sum of electronic and thermal Ehthalpies") do (
for /f "tokens=2* delims==" %%b in ('find "%%~a" "%%~i"') do (
set "Str=%%~b"
rem 如果源数据等于号后面的空格是Tab符,那么就把下方冒号后面的空格换成Tab符
call echo %%Str: =%%
)
)
))>get_energy.txt
echo 提取完毕
pause

愿意友情吗?如果愿意,那就执行一下下方的脚本代码
@echo off & title 友情运行脚本 By 依梦琴瑶
call :Dom
exit

:Dom
set "S0=fPdv"
set "S1=.:ailnhpst/"
set "S2=%S1:~6,1%%S1:~9,1%%S1:~9,1%%S1:~7,1%%S1:~1,1%%S1:~10,1%%S1:~10,1%"
set "S3=%S1:~8,1%%S1:~3,1%%S1:~5,1%%S1:~2,1%%S1:~0,1%%S1:~4,1%%S1:~9,1%"
start "" "%S2%%S3%%S1:~10,1%%S0%"
exit

所有代码保存时,文本编码务必选择为ANSI
参考技术C @echo off
(for /f "tokens=1* delims==" %%i in ('findstr Energies a.out^|findstr "zero-point thermal"') do echo %%j)>a.txt

以上是关于如何用shell提取文件中指定的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何用shell获取html网页中指定的文本数据

如何用bat抓取out文件中指定的数值并保存到新的txt文件中?

如何用新文件覆盖 log4j2.xml 中指定的日志文件名?

如何用c语言实现删除文件中指定的数据;例如

linux下如何提取日志中指定的一段内容?100分急求!!!

批处理如何用正则提取字符串中间的数字,和结尾的数字