html用变量代替文本内容,使用sed替换HTML文件中的变量文本

我疯了,试图遵循sed BRE(基本正则表达式)规则来替换HTML文件中非常简单的事件。使用sed替换HTML文件中的变量文本

我想我正确地跟着the spec,但没有一个我的尝试工作。

我想要做的是用新的东西(我正在计算作为我正在编写的脚本的一部分计算)替换一个元标记的内容。基本上,meta标签是这样的:

它总是包含遵循语法,在JS的正则表达式可以被描述为一个属性:

/version=\"v[0-9]+\.[0-9]+\.[0-9]+\"/g

所以我已经尝试了大量的sed命令来实现它的工作,并且它似乎不像记载的那样工作,除非我误解了事情。有些我已经试过命令:

✗ sed -i -E '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g ./src/index.html

✗ sed -i -E '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g './src/index.html'

✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g ./src/index.html

✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\whatever/g ./src/index.html

✗ sed -i -E s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g ./src/index.html

✗ sed -i '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\"whatever/g ./src/index.html

✗ sed -i '' s/version=\"v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+/version=\whatever/g ./src/index.html

✗ sed -i '' s/version=\"v[:digit:]+\.[:digit:]+\.[:digit:]+/version=\whatever/g ./src/index.html

✗ sed -i '' s/v[:digit:]+\.[:digit:]+\.[:digit:]+/whatever/g ./src/index.html

✗ sed -i '' s/v[:digit:]+[:punct:][:digit:]+[:punct:][:digit:]+/whatever/g ./src/index.html

✗ sed -i '' s/v[:digit:][:punct:][:digit:][:digit:][:digit:][:punct:][:digit:]+/whatever/g ./src/index.html

✗ sed -i '' s/v[:digit:][:punct:][:digit:][:digit:][:digit:][:punct:][:digit:]/whatever/g ./src/index.html

✗ sed -i '' s/v[0-9]+\.[0-9]+.[0-9]+/whatever/g ./src/index.html

✗ sed -i '' s/version=\"[^ \"]+\"/whatever/g ./src/index.html

✗ sed -i '' s/version="[^ "]+"/whatever/g ./src/index.html

✗ sed -i '' s/version=\"[^\"]+\"/whatever/g ./src/index.html

✗ sed -i '' s/version=/whatever=/g ./src/index.html

✗ sed -i '' s/version=\"/whatever=\'/g ./src/index.html

✗ sed -i '' s/version=\"[^\"]/whatever=\"/g ./src/index.html

帮助?它是正确找到文件。当我尝试使用不包含正则表达式的版本(请参阅底部的第三个版本)时,它会正确替换,但不知何故,我的正则表达式语法在这里似乎不起作用。

或者任何人都可以想到一个更简单/更可靠的方法来做到这一点?

2017-06-29

Sasha

+1

尝试'sed的-i' “S /版= \” V [0-9] * \。[ 0-9] * \。[0-9] * \“/ whatever =/g”。/ src/index.html' –

+0

@WiktorStribiżew - 工作正常!想让它成为答案,以便我可以选择它? –

<think>嗯,用户想在Linux系统中批量替换文本,需要了解相关的命令或脚本示例,比如sed、awk这些工具。首先,我得回忆一下这些工具的用法,然后整理出常用的方法。用户可能对sed和awk有一定了解,但需要具体的例子来操作。 我记得sed是流编辑器,适合简单的文本替换。比如替换文件中的某个字符串,可以用s命令。但用户提到批量替换,可能涉及多个文件或者复杂的路径处理。比如引用[1]中提到的路径替换需要转义斜杠,这可能会让命令变得复杂。这时候可能需要用不同的定界符,比如用#代替/,避免转义的问题。 然后是awk,它更适合处理结构化的数据,比如按列处理。引用[2]中的例子展示了awk脚本的用法,处理/etc/passwd文件中的用户信息。不过用户的需求是替换文本,所以可能需要用到gsub函数。比如在awk中替换第三列的数据,或者全局替换某个模式。 另外,用户可能还需要处理多个文件,这时候可以用find结合sed或awk。比如用find查找所有匹配的文件,然后通过-exec参数执行替换命令。或者使用xargs来传递文件列表,提高效率。 还要考虑是否需要直接修改原文件sed的-i选项可以原地替换,而awk通常需要重定向输出到临时文件,再替换文件。比如引用[3]中提到的perl和python也是选项,但用户主要询问sed和awk,所以应该重点介绍这两个工具。 然后,用户可能需要一些示例,比如如何替换多个文件中的字符串,如何处理包含特殊字符的替换,比如路径中的斜杠。这时候可以给出使用不同定界符的例子,或者用变量来传递替换内容,避免转义的麻烦。 可能还需要提到备份的问题,使用-i选项时最好先备份原文件,或者在替换前测试命令是否正确。比如用sed的-i.bak来生成备份文件,避免数据丢失。 最后,总结一下各个工具的适用场景,如引用[3]所说,sed适合简单替换,awk适合结构化的数据处理,而perl和python适合更复杂的任务。但用户的问题主要集中在sed和awk,所以需要给出这两个工具的具体用法和示例。</think>在Linux系统中批量替换文本的常用方法及工具包括`sed`、`awk`等,以下是具体操作示例和适用场景说明: --- ### **1. 使用 `sed` 批量替换** #### 基础替换(单文件) ```bash # 将文件中的"old_text"替换为"new_text",直接修改原文件 sed -i 's/old_text/new_text/g' filename.txt ``` #### 处理路径替换(避免转义) 当替换内容包含`/`时,可改用其他符号作为定界符(如`#`),引用[1]中路径替换示例: ```bash # 替换/bin/bash为/bin/csh,无需转义斜杠 sed -i 's#/bin/bash#/bin/csh#g' /etc/passwd ``` #### 批量替换多个文件 ```bash # 替换当前目录下所有.txt文件中的内容 find . -name "*.txt" -exec sed -i 's/old_text/new_text/g' {} \; ``` --- ### **2. 使用 `awk` 批量替换** #### 基础字段替换 `awk`适合处理结构化文本(如按列替换),引用[2]中条件筛选示例的扩展: ```bash # 将第3列大于等于1000的行中"old"替换为"new" awk -F: '$3 >= 1000 {gsub(/old/, "new", $0); print}' /etc/passwd ``` #### 修改后保存到文件 ```bash # 替换后输出到新文件,再覆盖原文件 awk '{gsub(/old/, "new"); print}' input.txt > tmp.txt && mv tmp.txt input.txt ``` --- ### **3. 组合命令实现复杂替换** #### 多条件替换(`sed`+正则) ```bash # 替换以"error:"开头的行中的数字为"XXX" sed -i '/^error:/s/[0-9]\+/XXX/g' logfile.log ``` #### 跨行替换(需`perl`辅助) 若涉及跨行文本替换,推荐`perl`命令(引用[3]): ```bash perl -i -pe 's/start(.*?)end/replacement/s' file.txt ``` --- ### **工具选型建议** | 工具 | 适用场景 | 特点 | |--------|----------------------------------------|-----------------------| | `sed` | 简单文本替换、正则匹配 | 语法简洁,适合单行操作 | | `awk` | 结构化数据替换、按列处理 | 支持条件判断和字段操作 | | `perl` | 复杂正则匹配、跨行替换 | 功能最强大,语法灵活 | --- 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值