sed 任意数字的通配符

sed 任意数字的通配符

我正在尝试使用 sed 将字符串“samples:[任意数量] failing samples:[任意数量]”替换为字符串“OK”。

这适用于个位数。但是,我需要一个适用于任意数字的选项:

sed 's/samples : [0-9] failing samples : [0-9]/OK/g' ./sedTest.txt

数据之前:

10,foo,bar,samples : 9 failing samples : 7,bar,next Item
10,foo,bar,samples : 99 failing samples : 55,bar,next Item
10,foo,bar,samples : 9229 failing samples : 5225,bar,next Item

我正在努力实现这一目标。

10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item

答案1

正如 Thor 所建议的,你可以使用“\+”来贪婪地吞下所有出现的事件:

sed 's/samples : [0-9]\+ failing samples : [0-9]\+/OK/g' ./sedTest.txt

但更常见的是使用“*”:

sed 's/samples : [0-9]* failing samples : [0-9]*/OK/g' ./sedTest.txt

例如以下输出:

cat sedTest.txt; echo "Replace numbers..."; sed 's/samples : [0-9]* failing samples : [0-9]*/OK/g' ./sedTest.txt
10,foo,bar,samples : 9 failing samples : 7,bar,next Item
10,foo,bar,samples : 99 failing samples : 55,bar,next Item
10,foo,bar,samples : 9229 failing samples : 5225,bar,next Item

Replace numbers...
10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item

答案2

正如您所注意到的,[0-9]它只会匹配一位数字。要匹配更多数字,必须添加量词。由于您想要“一位或多位”数字,只需+在括号后添加一个字符即可。它将贪婪地匹配括号内的所有字符(在本例中为任何数字)。

sed 's/samples : [0-9]+ failing samples : [0-9]+/OK/g' ./sedTest.txt

根据您使用的系统,您可能需要sed使用-r标志 (linux) 或-E标志 (mac) 运行。这是为了允许使用现代正则表达式符号,例如+

+或者,不要使用,而使用*。这将匹配“零次或多次”而不是“一次或多次”。这里的优点是不需要任何标志。

相关内容