如果我有
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保持匹配中的字符不变。
很抱歉我不清楚我想要什么,请耐心等待我
答案 0 :(得分:0)
匹配123456
后跟三个不需要修改的字符,然后用111
替换接下来的三个字符:
sed 's/\(123456...\).../\1111/g' file
\( ... \)
捕获我们不想修改的字符串部分。用\1
重新插入这些内容。该行的整个匹配位替换为“\( ... \)
中的位(即\1
),后跟111
”。
答案 1 :(得分:0)
如果你想改变每一个零(如你的例子中所示),那么只需sed 's/0/1/g'
即可。或sed -e '/^123456/ s/0/1/g'
在以123456
开头的行上执行相同操作。
但是,要按照您的要求计算字符数,请使用( .. )
来捕获不同的部分,并使用\1
来替换它们(使用sed -E
)。所以:
echo 123456abcdefgh | sed -Ee 's/^(123456...).../\1111/'
输出123456abc111gh
。 \1
会放回与123456...
匹配的部分,接下来的三个是字面字符。
(没有-E
,您需要\( .. \)
进行分组。)