我想处理某些文件中的文本,有时表达式存在于一行中,有时则存在于多行
中例如在多行
中myfunc(param1,
param2,
param3);
或一行
myfunc(param1, param2, param3);
是否存在sed仅在myfunc
和;
之间处理文字的方法?关键字
在第一步这有助于我将所有多行移植到一行。然后我可以做一个线型
我的manupulation如果可能的话?
答案 0 :(得分:1)
Sed用于单个行上的简单替换,即全部。对于任何更有趣的东西,你应该使用awk。这样的事情可能就是你想要的:
$ cat file
myfunc(param1,
param2,
param3);
myfunc(param1, param2, param3);
$ cat tst.awk
/myfunc/ { buf=""; inBlock=1 }
inBlock {
buf = (buf==""?"":buf RS) $0
if (/;/) {
$0 = buf
sub(/param2/,"lets have a tea party")
inBlock = 0
}
}
!inBlock
$ awk -f tst.awk file
myfunc(param1,
lets have a tea party,
param3);
myfunc(param1, lets have a tea party, param3);
只需将sub(/param2/,"lets have a tea party")
行替换为您真正想要对myfunc
和;
之间的文本块进行的操作。
答案 1 :(得分:0)
您可以使用以下sed
脚本:
extract.sed:
# Check for "my"
/\bmy\b/ {
# Replace everything in front of
# my (including it)
s/.*\bmy\b//
# Define a label "a"
:a
# If the line does not contain "processes"
/\bprocesses\b/!{
# Get the next line of input and append
# it to the pattern buffer
N
# Branch back to label "a"
ba
}
# Replace "processes" and everything after it
s/\bprocesses\b.*//
# Print the pattern buffer
p
}
这样称呼:
sed -nf extract.sed input.txt