我正在尝试使用sed替换文本文件中的一系列星号符号和-999.9.但是我无法弄清楚如何正确地逃避通配符.
例如
$ echo "2006.0,1.0,************,-5.0" | sed 's/************/-999.9/g'
sed: 1: "s/************/-999.9/g": RE error: repetition-operator operand invalid
Run Code Online (Sandbox Code Playgroud)
不行.和
$ 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
Run Code Online (Sandbox Code Playgroud)
为每个*提供-999.9,这也不是我想要的.
谢谢!
用这个:
echo "2006.0,1.0,************,-5.0" | sed 's/[*]\+/-999.9/g'
Run Code Online (Sandbox Code Playgroud)
测试:
$ echo "2006.0,1.0,************,-5.0" | sed 's/[*]\+/-999.9/g'
2006.0,1.0,-999.9,-5.0
Run Code Online (Sandbox Code Playgroud)
这些(以及更多)中的任何一个都是正则表达式,可以根据需要修改该行:
$ 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
Run Code Online (Sandbox Code Playgroud)
sed使用正则表达式而不是字符串,因此,如果您要使用sed,则需要学习正则表达式语法,尤其是BRE(默认情况下sed使用)和ERE(可以告知某些sed使用)之间的区别相反)和PCRE(sed从未使用过,但其他一些工具和“ regexp checkers”使用了)。仅上述第一个解决方案是BRE,它将在所有平台上的所有sed上运行。Google是您的朋友。
*是需要转义的正则表达式符号。
您甚至可以使用 BASH 字符串替换:
s="2006.0,1.0,************,-5.0"
echo "${s/\**,/-999.9,}"
2006.0,1.0,-999.9,-5.0
Run Code Online (Sandbox Code Playgroud)
使用sed:
sed 's/\*\+/999.9/g' <<< "$s"
2006.0,1.0,999.9,-5.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13418 次 |
| 最近记录: |