sed 字符保持匹配不变

sed charachter to leave a match untouched

如果我有

123456red100green 123456bee010yellow 123456usb110orange 123456sos011querty 123456let101bottle

我希望它成为

123456red111green 123456bee111yellow 123456usb111orange 123456sos111querty 123456let111bottle

注意:前6个字符不变, 下面6个改, 这些字符串也可能位于文件中的任何位置(开始、结束、任何位置)

我想指定 sed 到 1)找到123456 2)跳过接下来的三个字符 3) 将接下来的三个替换为 111

我最接近的是: sed '/s/123456....../123456...111/g' 我知道点意味着什么,但我不知道另一边的等价物。简而言之,如何命令 sed 使匹配中的字符保持不变。 抱歉,我不清楚我想要什么,请多多包涵

匹配123456后面三个不要修改的字符,然后将后面三个字符替换为111:

sed 's/\(123456...\).../11/g' file

\( ... \) 捕获字符串中我们不想修改的部分。这些用 </code> 重新插入。该行的整个匹配位被替换为 "the bit in the <code>\( ... \) (i.e. </code>) followed by <code>111".

如果您想更改每个零(如您的示例所示),那么 sed 's/0/1/g' 就可以了。或者 sed -e '/^123456/ s/0/1/g' 在以 123456.

开头的行上执行相同的操作

但是要计算字符数,如您所问,使用 ( .. ) 捕获不同的部分并使用 </code> 替换它们(使用 <code>sed -E)。所以:

echo 123456abcdefgh | sed -Ee 's/^(123456...).../11/'

输出123456abc111gh</code>把<code>123456...匹配的部分放回去,后面三个是字面字符。

(如果没有 -E,您需要 \( .. \) 才能分组。)