sed - 捕获一组并只替换一个字符
sed - capture a group and replace only one character
我有以下问题,文件格式如下:
1XYZ00
所以结果会是
2XYZ00
我只想将第一个数字更改为另一个数字,例如 9,其余模式不做任何更改。
我真的需要捕捉这个模式 1XYZ00 并且只有这个模式并将第一个数字替换为另一个。
我这个文件可以有数字,但有不同的模式,不能修改。
OS是分OS7.
这是我测试过的
sed -E 's/1{1}[A-Z]{3}[0-9]{2}/9{1}[A-Z]{3}[0-9]{2}/g' ~/input.txt > ~/output.txt
我也试过捕获组:
sed --debug -E -r 's/1\(1{1}[A-Z]{3}[0-9]{2}\)/9/g' ~/input.txt > ~/output.txt
sed 的调试模式告诉我模式匹配但没有进行替换。
我想我已经很接近了,请问有专家可以帮助我吗?
非常感谢,
我不确定这对你来说是否足够。
sed -i 's/1/9/' input.txt
$ cat ip.txt
foo 1XYZ00
xyz 1 2 3
hi 3XYZ00
1XYZ0A
cool 3ABC23
$ # matches any number followed by 3 uppercase and 2 digit characters
$ sed -E 's/[0-9]([A-Z]{3}[0-9]{2})/9/' ip.txt
foo 9XYZ00
xyz 1 2 3
hi 9XYZ00
1XYZ0A
cool 9ABC23
$ # matches digit '1' followed by 3 uppercase and 2 digit characters
$ sed -E 's/1([A-Z]{3}[0-9]{2})/9/' ip.txt
foo 9XYZ00
xyz 1 2 3
hi 3XYZ00
1XYZ0A
cool 3ABC23
OP 尝试的问题:
1{1}[A-Z]{3}[0-9]{2}
等同于 1[A-Z]{3}[0-9]{2}
- 在替换部分使用
9{1}[A-Z]{3}[0-9]{2}
将为您提供这些字符。它们没有任何特殊含义。
s/1\(1{1}[A-Z]{3}[0-9]{2}\)/9/
这个确实使用了捕获组,但是 ()
不应该在 -E
选项处于活动状态时进行转义,并且 1{1}
不应该是捕获组的一部分
我有以下问题,文件格式如下:
1XYZ00
所以结果会是
2XYZ00
我只想将第一个数字更改为另一个数字,例如 9,其余模式不做任何更改。
我真的需要捕捉这个模式 1XYZ00 并且只有这个模式并将第一个数字替换为另一个。 我这个文件可以有数字,但有不同的模式,不能修改。
OS是分OS7.
这是我测试过的
sed -E 's/1{1}[A-Z]{3}[0-9]{2}/9{1}[A-Z]{3}[0-9]{2}/g' ~/input.txt > ~/output.txt
我也试过捕获组:
sed --debug -E -r 's/1\(1{1}[A-Z]{3}[0-9]{2}\)/9/g' ~/input.txt > ~/output.txt
sed 的调试模式告诉我模式匹配但没有进行替换。
我想我已经很接近了,请问有专家可以帮助我吗?
非常感谢,
我不确定这对你来说是否足够。
sed -i 's/1/9/' input.txt
$ cat ip.txt
foo 1XYZ00
xyz 1 2 3
hi 3XYZ00
1XYZ0A
cool 3ABC23
$ # matches any number followed by 3 uppercase and 2 digit characters
$ sed -E 's/[0-9]([A-Z]{3}[0-9]{2})/9/' ip.txt
foo 9XYZ00
xyz 1 2 3
hi 9XYZ00
1XYZ0A
cool 9ABC23
$ # matches digit '1' followed by 3 uppercase and 2 digit characters
$ sed -E 's/1([A-Z]{3}[0-9]{2})/9/' ip.txt
foo 9XYZ00
xyz 1 2 3
hi 3XYZ00
1XYZ0A
cool 3ABC23
OP 尝试的问题:
1{1}[A-Z]{3}[0-9]{2}
等同于1[A-Z]{3}[0-9]{2}
- 在替换部分使用
9{1}[A-Z]{3}[0-9]{2}
将为您提供这些字符。它们没有任何特殊含义。 s/1\(1{1}[A-Z]{3}[0-9]{2}\)/9/
这个确实使用了捕获组,但是()
不应该在-E
选项处于活动状态时进行转义,并且1{1}
不应该是捕获组的一部分