linux 使用sed替换精确单词[已关闭]

daolsyd0  于 2022-12-18  发布在  Linux
关注(0)|答案(1)|浏览(166)

已关闭。此问题需要details or clarity。当前不接受答案。
**想改进此问题吗?**添加详细信息并通过editing this post澄清问题。

4天前关闭。
Improve this question
我想用sed查找并替换3600,但是它替换了所有匹配的匹配项。我只想替换3600,而3600可以出现在文件的任何地方。

sed -e 's/\<3600\>/21600/g' file.txt
expr: time() - somerandometext > 3600*25
expr: time() - somerandometext > 3600

我得到的输出

expr: time() - somerandometext > 21600*25
expr: time() - somerandometext > 21600

预期输出

expr: time() - somerandometext > 3600*25
expr: time() - somerandometext > 21600
vmdwslir

vmdwslir1#

对于大多数sed

sed -E 's/(^|[[:blank:]])3600([[:blank:]]|$)/\121600\2/' file

或者perl:

perl -pE 's/(?<=^|\h)3600(?=\h|$)/21600/g' file

或awk:

awk '{for (i=1; i<=NF; i++) if ($i=="3600") $i="21600"} 1' file

任何一个指纹:

expr: time() - somerandometext > 3600*25
expr: time() - somerandometext > 21600

您尝试使用sed:

sed -e 's/\<3600\>/21600/g' file.txt

正在使用\<\>,这是用于断词的GNU sed扩展。由于以下一个或两个原因,此操作失败:
1.该示例具有' 3600*',并且满足两侧的断字;
1.您正在使用GNU sed以外的sed。

相关问题