如何用 sed 替换特定字符串后面的特定字符和其他 n 个字符?

如何用 sed 替换特定字符串后面的特定字符和其他 n 个字符?

我尝试查看旧帖子,但没有得到我的答案,提前致谢!我有一些文件,其中 indisei 具有相同模式的行,我想在特定字符串后用“A”替换以下 [mau] 之一: n=22 string="abnt7777/knowthis" char 更改“m”

abnt7777/知道这个不知道CAHRACTERSmRESTOFSTRING

我所知道的是第一个字符串“abnt7777/knowthis”,我也知道“abnt7777/knowthis”和 a 之间有多少个字符,更改后为 22:

abnt7777/knowthis不知道CAHRACTERSARESTOFSTRING

答案1

echo "abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING" | sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#'

印刷

abnt7777/knowthisDONTKNOWWICHCAHRACTERSARESTOFSTRING

sed命令搜索abnt7777/knowthis后跟 22 个字符,后跟m.除 之外的所有字符m都包含在 和 中\(\)将其捕获为组 1。匹配的字符串将替换为组 1 ( \1) 后跟A。该线路的所有其他部分将保持不变。

如果您想替换文件内容中的字符串,请使用类似

sed 's#\(abnt7777/knowthis.\{22\}\)m#\1A#' inputfile > outputfile

注意:如果您的真实输入模式不是其他内容,则abnt7777/knowthis您必须检查它是否包含sed.

答案2

对于变量扩展,如果我理解正确的话:

foo="abnt7777/knowthisDONTKNOWWICHCAHRACTERSmRESTOFSTRING"
echo ${foo:0:39}A${foo:40}

输出:

abnt7777/knowthis 不知道的人物角色A休息弦乐
                                      #^ 39 位置 (17 abnt7777/knowthis + 22)

相关内容