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
,您需要 \( .. \)
才能分组。)
如果我有
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
,您需要 \( .. \)
才能分组。)