使用 sed 为文件中的所有数字加上字符串前缀

Posted

技术标签:

【中文标题】使用 sed 为文件中的所有数字加上字符串前缀【英文标题】:Prefix all numbers in a file with a string using sed 【发布时间】:2016-12-20 16:07:52 【问题描述】:

使用 sed、awk 或其他可能的东西我想在文件中的所有数字前加上一个字符串,例如

输入:

sometext(0, 456)
sometext(01, 10)

输出:

sometext(somestring0, somestring456)
sometext(somestring01, somestring10)

我曾尝试使用 sed,但我的技能有限,因此未能产生任何有意义的输出。

使用 OSX10.11,所以我知道 sed 在 BSD 中的行为与在其他 *nix 中的行为略有不同。

如果能更好地解决这个问题,我手头也有 perl 和 python,但首选 sed 和 awk。

【问题讨论】:

【参考方案1】:

您可以使用这个 sed 命令来匹配和捕获一个数字并替换为它的前缀:

sed -E 's/[[:digit:]]+/somestring&/g' file

sometext(somestring0, somestring456)
sometext(somestring01, somestring10)

请记住,somestring 不应包含特殊的替换结构,例如 &, \1, \2, \3 等。

【讨论】:

sed 's/[0-9][0-9]*/somestring&/g' file 用于所有 sed 的可移植性。 可能在模式中添加(,,如果sometext 中有数字,则会给出错误结果sed -E 's/\([(,][[:blank:]]*\)\([0-9][0-9]*\)/\1somestring\2/g'

以上是关于使用 sed 为文件中的所有数字加上字符串前缀的主要内容,如果未能解决你的问题,请参考以下文章

vi编辑字符串替换及sed用法

使用 sed 和正则表达式从字符串中提取数字

Sed:以/etc/passwd文件为模板

Linux Sed命令在特殊字符后替换

使用grep和sed递归查找和替换所有文件中的字符串[重复]

Bash:如何消除字符串中的所有数字字符,但保留括号内的字符?