我正在寻找能够找到一组行的sed函数,并使用分隔符将其替换为另一组。
实施例
来源:
class Requests
{
function approveRequests($users){
foreach($users as $user){
if(hasQualified($user)){
acceptUser($user);
}else{
rejectUser($user)
}
}
}
}
要:
class Requests
{
function approveRequests($users){
autoAcceptMember($users);
}
}
请注意,源可能有几组其他大括号,但它们将同等匹配。所以它有3个开放,然后将有3个关闭,所以我想把所有东西都放在中间
答案 0 :(得分:0)
sed
无法执行上述操作,只能在一行上运行。
(好吧,它可以在多行上运行,但它不能区分看起来相同的}
。
你必须使用例如awk
或其他更高级的语言(python,perl等)
答案 1 :(得分:0)
这可能会让您了解如何使用sed编辑文件。
cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d' | sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/'
<强>输出:强>
class Requests
{
function approveRequests($users){
autoAcceptMember($users);
}
}
<强> inputFile.txt:强>
class here
{
are
some extra lines
}
class Requests
{
function approveRequests($users){
foreach($users as $user){
if(hasQualified($user)){
acceptUser($user);
}else{
rejectUser($user)
}
}
}
}
class here2 {
function are () {
some extra lines
also
}
使用sed并与正则表达式匹配并在
之间打印线条> cat inputFile.txt | sed -n '/^class Requests/,/^}/ p'
class Requests
{
function approveRequests($users){
foreach($users as $user){
if(hasQualified($user)){
acceptUser($user);
}else{
rejectUser($user)
}
}
}
}
使用sed并与正则表达式匹配并删除
之间的行sed -e '/foreach/,$ d' will give the following, in context:
> cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d'
class Requests
{
function approveRequests($users){
使用sed并与正则表达式匹配,替换并添加标记匹配
sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/' will give the following, in context:
> cat inputFile.txt | sed -n '/^class Requests/,/^}/ p' | sed -e '/foreach/,$ d' | sed -e 's/\(function.*\)/\1\n autoAcceptMember($users);\n }\n}\n/'
class Requests
{
function approveRequests($users){
autoAcceptMember($users);
}
}