【发布时间】:2021-05-13 11:32:19
【问题描述】:
我正在尝试匹配 "text"}, 但不是 "text"}},
具体:}, vs }},
我怎么能用 sed 写这个?
我试过了:s/\},
【问题讨论】:
-
您好,问题解决了吗?您需要更多帮助吗?
我正在尝试匹配 "text"}, 但不是 "text"}},
具体:}, vs }},
我怎么能用 sed 写这个?
我试过了:s/\},
【问题讨论】:
注意}}, 包含},。试试/"},/
【讨论】:
我还没有测试过,但是试试:
sed -i "/\b\("text"},\)\b/d" sourceFileName
【讨论】:
你可以使用
sed -E 's/(^|[^}])\},/\1/g' file > newfile
这里,
-E 启用 POSIX ERE 语法(^|[^}])\}, 匹配字符串的开头或除} 之外的任何字符,并将此值捕获到第 1 组(在替换模式中使用 \1 引用),然后匹配 },
g - 替换所有匹配项。如果您只是使用\1 作为替换,这将简单地删除},,如果需要替换,请添加一些文本。
【讨论】:
} 前面没有另一个 } 时才会删除 },。
如果您想考虑perl,那么使用否定的后向断言非常简单。
cat file
text"}, but not "text"}}, foobar"}, but not "xyz123"}},
perl -pe 's/(?<!})},/##/g' file
text"## but not "text"}}, foobar"## but not "xyz123"}},
这里(?<!}) 是否定的lookbehind,如果我们在}, 之前有一个},则匹配失败。
【讨论】: