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

如何编写Shell脚本查找SOME_WORD并复制行替换为NEW_WORLD

解决文本行复制替换问题

原脚本存在的问题

  • 错误的判断逻辑:if [ -z "$file_path" ];是检查文件路径是否为空,和是否找到目标内容无关,完全起不到检测作用。
  • 循环修改原文件导致读取异常:while read读取文件时,同时用sed -i修改原文件,会打乱文件读取指针,导致处理结果混乱。
  • Sed命令逻辑错误:原sed命令的匹配和替换逻辑不符合需求,且直接用变量$line作为匹配模式,若行内包含/、.等sed特殊字符会触发语法错误。

正确实现脚本

直接用sed即可完成需求,无需复杂循环:

search_value="SOME_WORD"
replace_value="NEW_WORLD"
file_path="./abc.ts"

# 检查文件是否存在
if [ ! -f "$file_path" ]; then
    echo "文件不存在: $file_path"
    exit 1
fi

# 使用sed处理:匹配含search_value的行,先输出原行,再输出替换后的行
sed -i "/$search_value/{p; s/$search_value/$replace_value/}" "$file_path"

脚本说明

  • / $search_value /:匹配包含目标关键词的行。
  • p:输出当前匹配到的原行。
  • s/$search_value/$replace_value/:将当前行的目标关键词替换为新内容,然后输出修改后的行。
  • 若使用macOS的sed,需将-i改为-i '',避免生成备份文件。

验证效果

执行前文件内容:

SOME_WORD_1: 'ABC',
BAD_WORD_1: 'ABC',
SOME_WORD_2: 'ABC',
BAD_WORD_1: 'ABC',
SOME_WORD_3: 'ABC'

执行后文件内容:

SOME_WORD_1: 'ABC',
NEW_WORLD_1: 'ABC',
BAD_WORD_1: 'ABC',
SOME_WORD_2: 'ABC',
NEW_WORLD_2: 'ABC',
BAD_WORD_1: 'ABC',
SOME_WORD_3: 'ABC',
NEW_WORLD_3: 'ABC'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:40