我正在尝试使用 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) 运行。这是为了允许使用现代正则表达式符号,例如+
。
+
或者,不要使用,而使用*
。这将匹配“零次或多次”而不是“一次或多次”。这里的优点是不需要任何标志。