我正在尝试使用sed将文本文件中的一系列星号符号替换为-999.9。但是,我无法弄清楚如何正确地逃避通配符。
e.g。
$ echo "2006.0,1.0,************,-5.0" | sed 's/************/-999.9/g'
sed: 1: "s/************/-999.9/g": RE error: repetition-operator operand invalid
不起作用。和
$ echo "2006.0,1.0,************,-5.0" | sed 's/[************]/-999.9/g'
2006.0,1.0,-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9-999.9,-5.0
为每个*提出-999.9,这不是我想要的。
谢谢!
答案 0 :(得分:5)
使用此:
echo "2006.0,1.0,************,-5.0" | sed 's/[*]\+/-999.9/g'
<强>测试强>
$ echo "2006.0,1.0,************,-5.0" | sed 's/[*]\+/-999.9/g'
2006.0,1.0,-999.9,-5.0
答案 1 :(得分:5)
其中任何一个(以及更多)都是一个正则表达式,可以根据需要修改该行:
$ echo "2006.0,1.0,************,-5.0" | sed 's/\*\**/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed 's/\*\+/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed -r 's/\*+/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed 's/\*\{12\}/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed -r 's/\*{12}/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed 's/\*\{1,\}/999.9/g'
2006.0,1.0,999.9,-5.0
$ echo "2006.0,1.0,************,-5.0" | sed -r 's/\*{1,}/999.9/g'
2006.0,1.0,999.9,-5.0
sed对正则表达式而不是字符串进行操作,因此如果你要使用sed,你需要学习正则表达式语法,特别是BRE(默认使用sed)和ERE(有些seds可以是被告知要使用)和PCREs(其他人从不使用其他工具和“regexp checkers”)。只有上面的第一个解决方案是BRE,它可以在所有平台上的所有seds上运行。谷歌是你的朋友。
答案 2 :(得分:2)
*
是需要转义的正则表达式符号。
您甚至可以使用BASH字符串替换:
s="2006.0,1.0,************,-5.0"
echo "${s/\**,/-999.9,}"
2006.0,1.0,-999.9,-5.0
使用sed
:
sed 's/\*\+/999.9/g' <<< "$s"
2006.0,1.0,999.9,-5.0
答案 3 :(得分:2)
Ya,*
是特殊的元字符,它重复前一个标记零次或多次。依次转义*
以匹配文字*
个字符。
sed 's/\*\*\*\*\*\*\*\*\*\*\*\*/-999.9/g'
答案 4 :(得分:0)
当这种可能性被引入gawk时我不知道!
public static void main(String[] args)
{
int sum = 0;
Scanner console = new Scanner(System.in);
System.out.print("Please enter a Number: ");
String num = console.nextLine();
try
{
num = num.trim();
System.out.print("Digits: ");
for (int i = 0; i < num.length(); i++)
{
char d = num.charAt(i);
int n = Integer.parseInt(String.valueOf(d));
sum += n;
System.out.print(d + ", ");
}
System.out.print("Sum: " + sum);
}
catch (NumberFormatException e)
{
System.out.print("Invalid Number entered");
}
console.close();
}