awk - sed,匹配2个模式(包括)之间的所有行,然后将第二个匹配放在顶部
问题描述
这是我需要做的:
输入:(Python)
## This is a function,
## its purpose is... yada yada yada
def function_name(x):
return x + 1
输出:(降价)
## function_name
This is a function,
its purpose is... yada yada yada
到目前为止,我得到了:
sed -n '/## /,/def/ { /## \|def/ p }' TEST.py | cut -d' ' -f2- | sed 's/(.*)\(.*\)://'
产生:
This is a function,
its purpose is... yada yada yada
function_name
有2个条件:
1.- “##”和“def”之间不匹配任何这些模式的行应该被忽略。
例子:
输入:(Python)
## This is a function,
## its purpose is... yada yada yada
# This is a normal comment, nothing to see here! (ignored)
def function_name(x):
return x + 1
输出:(降价)
## function_name
This is a function,
its purpose is... yada yada yada
2.- 第二种模式必须被概括,例如,而不是使用“def”,假设我想使用“类”。
输入:(Python)
## This is a class,
## its purpose is... yada yada yada
# This is a normal comment, nothing to see here! (ignored)
class class_name:
__init__(self, x):
self.x = x
输出:(降价)
## class_name
This is a class,
its purpose is... yada yada yada
解决方案
在每个 Unix 机器上的任何 shell 中使用任何 awk(如果你的 awk 不支持 POSIX 字符类,则使用它)a-zA-Z0-9
:[:alnum:]
$ cat tst.awk
sub(/^## */,"") {
cmts = cmts $0 ORS
next
}
sub(/^[[:alnum:]_]+ */,"") {
sub(/[^[:alnum:]_].*/,"")
print "##", $0
print cmts
cmts = ""
}
$ awk -f tst.awk file
## function_name
This is a function,
its purpose is... yada yada yada
## function_name
This is a function,
its purpose is... yada yada yada
## class_name
This is a class,
its purpose is... yada yada yada
以上是在这个输入文件上运行的:
$ cat file
## This is a function,
## its purpose is... yada yada yada
def function_name(x):
return x + 1
## This is a function,
## its purpose is... yada yada yada
# This is a normal comment, nothing to see here! (ignored)
def function_name(x):
return x + 1
## This is a class,
## its purpose is... yada yada yada
# This is a normal comment, nothing to see here! (ignored)
class class_name:
__init__(self, x):
self.x = x
推荐阅读
- swift - 为什么我们不需要在选择器中输入参数 :: Swift 4
- javascript - 如果不为空,则将对象的所有值从整数替换为字符串
- c# - Post 方法在 Asp.net core 2.2 Web API 控制器中返回 404
- node.js - 如何让我的异步数据库连接关闭?
- python - 使用多处理和 sharedmem 的双线性插值
- python - 笛卡尔自连接查找唯一对 Python
- c - 这个C工会的成员有什么区别吗?
- python - 在python中使用序列计数器对数据进行分组
- c# - 如何在 Unity 运行时更改 GridLayoutGroup 的项目精灵
- mysql - MySQL WorkBench vs CC 无法连接到服务器