我想找到以下文字
get_pins {
并将其替换为
get_pins -hierarchical {proc_top_*/
我已尝试使用sed
,但我不确定自己做错了什么。我知道你需要在大括号前面使用#,但我仍然无法让命令正常工作。
我最接近的是:
sed 's/get_pins #{#/get_pins -hierarchical #{#proc_top_*\//g' filename.txt > output
但它没有做我上面想要的替换。
答案 0 :(得分:2)
问题不在花括号中,而在/
中。
这正是sed
允许您执行备用分隔符的原因。
以下行使用!
作为分隔符,并且对于包含get_pins {
的简单文件正常工作。
sed 's!get_pins {!get_pins -hierarchical {proc_top_*/!g' Input.txt
输出:
get_pins -hierarchical {proc_top_*/
更新:基于mklement0的评论,并使用csh
shell进行测试,以下内容适用于csh
。
sed 's@get_pins {@get_pins -hierarchical {proc_top_*/@g' Input.txt
答案 1 :(得分:2)
@ merlin2011的答案向您展示了如何使用其他分隔符进行操作,但至于为什么您的命令无法正常工作:
如果您只删除所有#
个字符,那么它实际上非常好。来自你的陈述:
sed 's/get_pins {/get_pins -hierarchical {proc_top_*\//'g filename.txt > output
此处涉及两个不同的转义要求:
/
转义为\/
。\
- 前缀完成,但是在您的情况下,不需要进行此类转义:因为您不使用-E
或-r
来表示使用扩展正则表达式 - 因此使用< em> basic 正则表达式 - {
实际上不是特殊字符,因此您无需逃避它。相反,如果您使用了-E
(-r
),那么您应该将{
转义为\{
。答案 2 :(得分:0)
这个awk
应该替换:
awk '{sub(/get_pins {/,"get_pins -hierarchical {proc_top_*/")}1'