说我有以下文件:
$ showkey -a
Press any keys - Ctrl-D will terminate this program
, 44 0054 0x2c
. 46 0056 0x2e
^[, 27 0033 0x1b
44 0054 0x2c
^[. 27 0033 0x1b
46 0056 0x2e
我想在public class Foo {
// Some code
// There will be functions here, so there are other {}
// I WANT TO INSERT HERE
}
类中插入一个函数。这将在Foo
的最后一次出现之前。
我怎样才能在sed中这样做?
修改
适用于Mac和Linux的脚本怎么样?
答案 0 :(得分:1)
试试这个:
sed -i '/^\(}\)/ i new_function' file
在Debian上为我工作。
答案 1 :(得分:0)
sed '$s/\(}\)/Put thing here\n\1/'
前面的 $
会立即与最后一行匹配,因此如果}不在文件的最后一行,它将无效。
答案 2 :(得分:0)
假设文件中有多个类和可能的其他数据:
sed '/Foo/,/^}/s%^}%\t//New insert\n}%' file
在一天结束时,您总能找到一些与您的解决方案不相符的内容,因此您可能需要了解您的数据:)
下面还将在一行中处理类定义:
sed -e '/Foo/,/^}/s%^}%\t//New insert\n}%' -e '/Foo.*}$/s%}$%\t //New insert\n}%' file
答案 3 :(得分:0)
这可以在RedHat上完成GNU Sed 4.2.2的工作(如果你愿意,你可以测试它here)
$ sed -n '/class Foo2 {/,/^}$/{s/^}$/Insert here\n\0/};p' file
我假设文件可以包含更多类,并且我尝试在文件中间的类Foo2结束之前插入我的文本(在此处插入)。
测试:
$ cat file2
public class Foo {
// Some code
// There will be functions here, so there are other {}
}
public class Foo2 {
// Some code
// There will be functions here, so there are other {}
}
public class Foo3 {
// Some code
// There will be functions here, so there are other {}
}
$ sed -n '/class Foo2 {/,/^}$/{s/^}$/Insert here\n\0/};p' file2
public class Foo {
// Some code
// There will be functions here, so there are other {}
}
public class Foo2 {
// Some code
// There will be functions here, so there are other {}
Insert here
}
public class Foo3 {
// Some code
// There will be functions here, so there are other {}
}
说明:
/class Foo2 {/
,/^}$/
- 范围 - 从class name Foo2 {
到第一个^}$
{s/^}$/Insert here\n\0/}
- 替换部分。将^}$
替换为your text
加new line
加上替换的部分\0
;p
:打印
更新BSD
在@ghoti的精彩帮助下,在设置FreeBSD机器进行测试后,这似乎适用于FreeBSD(仅限bash):
sed -n "/class Foo2 {/,/^}\$/{s/^}\$/Insert here \\"$'\n'" &/;};p" file
请注意,如果shell不是bash,这将无效。无论如何你可以尝试一下。