如何覆盖文件中的字符串,但保持字符串的其余部分

时间:2016-11-16 17:10:51

标签: bash

挣扎于此可能有人有想法

我只想覆盖原始字符串上给定输出的字符数量,但保持其余部分不变

示例 原始字符串

00000000000000000000000000000000000

新字符串

sometexthere00000000000000000000000

看了很多种方式,但所有似乎都取代整行或寻找匹配的某些字符串

3 个答案:

答案 0 :(得分:2)

Sed会非常有帮助。

例如,您想要用sometexthere替换前12个字符,您可以编写

>>> echo 0000000000000000000000000000000000 | sed -E 's/^.{12}/sometexthere/'
sometexthere0000000000000000000000

它的作用是什么?

  • ^将正则表达式锚定在字符串的开头

  • .{12} .匹配任何内容,与{12}相匹配,匹配12个字符。

您也可以使用参数替换,例如

$ echo ${val/00000/hello}
hello000000000000000000000000000000

答案 1 :(得分:0)

您可以在正则表达式中使用.来匹配任何字符(仅一次)和^以匹配行的开头。

不知道文件的确切格式等,这里是一个使用sed编辑echo输出的字符串的例子:

echo "00000000000000000000000000000000000" | sed 's/^.........../aaaaaaaaaaaa/'

答案 2 :(得分:0)

完整的bash解决方案:

#!/bin/bash

# original="abcdefghijklmnopqrstuvwxyz0123456789"
original="00000000000000000000000000000000000"
overwrite="sometexthere"
modified=${overwrite}${original:${#overwrite}} # append overwrite with substring of original from overwrite's length to the end

echo ${modified}