You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Shell脚本从文本文件复制指定内容至新文件?

嘿,我来帮你搞定这两个Shell操作的问题!下面分情况给你详细说明:

问题1:从文件指定行复制内容到新文件

这里有几种常用且灵活的方法,按需选择就行:

  • 使用sed命令:
    如果你明确知道要提取的是第N行(比如第5行),直接用这个命令:

    sed -n '5p' input.txt > output.txt
    

    解释下:-n参数让sed只输出我们指定的内容,5p表示打印第5行,最后用>把结果写入新的output.txt文件。

  • 使用head+tail组合:
    这种方法逻辑很直观,先取前N行,再从这N行里取最后一行,就是目标行:

    head -n 5 input.txt | tail -n 1 > output.txt
    

    比如上面的命令就是提取第5行内容,写入新文件。

  • 使用awk命令:
    awk里的NR代表当前行号,直接匹配行号就能打印对应内容:

    awk 'NR==5' input.txt > output.txt
    

    当行号等于5时,awk会自动打印该行,最后重定向到新文件即可。

问题2:提取特定地址内容到新文件

你的文件内容是一行包含多段信息,要精准提取Address:后面的1234 Main St.,试试这几个方法:

  • 使用sed正则捕获:
    用扩展正则表达式捕获目标内容,替换掉无关部分:

    sed -E 's/.*Address: (.*) SSN:.*/\1/' input.txt > output.txt
    

    解释:-E参数启用扩展正则,.*Address: 匹配到Address:之前的所有内容,(.*)捕获Address:到SSN:之间的地址内容,SSN:.*匹配SSN:之后的内容,最后用\1替换整行,只保留捕获的地址部分,写入新文件。

  • 使用awk指定分隔符:
    把Address: 和 SSN:设为字段分隔符,直接提取对应字段:

    awk -F 'Address: | SSN:' '{print $2}' input.txt > output.txt
    

    -F指定了两个可选的分隔符,这样整行被分成3部分,第2部分就是我们要的地址,打印后写入新文件。

  • 使用grep的正向/反向预查:
    如果你熟悉Perl风格正则,可以用grep的精准匹配:

    grep -oP '(?<=Address: ).*(?= SSN:)' input.txt > output.txt
    

    -o参数让grep只输出匹配的部分,(?<=Address: )是反向预查(确保前面是Address:),.*匹配地址内容,(?= SSN:)是正向预查(确保后面是SSN:),这样就能精准提取出目标地址啦。

内容的提问来源于stack exchange,提问作者Nikhilesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:08:52