我有一个大文件,其中一些行如下:
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
我想用...+PUNCT
为此,我做了以下事情:
sed 's/\.\.\.\.\+\*UNKNOWN\*/\.\.\.\+PUNCT/g' myfile.out > myfile_result.out
然而,没有一条线路消失了。
grep -F '...+*UNKNOWN*' myfile.out
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
.... ....+*UNKNOWN*
我无法找到我的错误,你能帮帮我吗?
答案 0 :(得分:1)
在sed
的某些版本中,\+
具有特殊含义,请使用+
来按字母顺序匹配。
答案 1 :(得分:0)
请你试试。
sed 's/+\*UNKNOWN/+PUNCT/' Input_file
+举例说明:
echo "This is an example: 123 test 123" | sed -E 's/^[^0-9]*([0-9]+).*/\1/'
123
假设我们有一行This is an example: 123 test 123
,所以这里[0-9]+
将匹配第一组数字,这些数字汇集在一起然后将它们保存在sed
的内存中我正在打印它们使用\1
(再次转义1让sed
知道它是我在这里调用的内存序列。)
答案 2 :(得分:0)
\+
表示在“+”之前的表达式的一个或多个匹配,表示没有+
字面值。
要匹配文字“+”,请使用+
来匹配文字中的加号。
修改后的表达式:
sed 's/\.\.\.\.+\*UNKNOWN\*/\.\.\.\+PUNCT/g' myfile.out > myfile_result.out