我有一个像这样的字符串:func showFetchNextSliceFailed(result: UserResult<[Product]>) {
由此,我想1)。仅提取showFetchNextSliceFailed
2)。将其插入给定行的正上方,如#Mark showFetchNextSliceFailed
。
func showProductsList(result: UserResult<[Product]>) {
}
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
预期输出:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
我尝试使用 grep 和 sed,但仍然无法正确弄清楚如何提取和替换字符串。
答案1
和sed
- 将匹配的模式空间复制到保存空间
- 修改模式空间
- 从保留空间恢复原始内容并将其附加
前任。
$ sed '/func show/ {h; s/func \(show[^(]*\).*/#Mark \1/; G;}' file
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
答案2
如果您有以下code
文件:
输入:
$more code
func showProductsList(result: UserResult<[Product]>) {
}
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
命令:
perl -i.bak -pe "s/^^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g" code
输出:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
说明:
-i.bak
perl
用于备份输入文件的就地模式s/^( *|\t*)func\s(\w+)func\s(\w+)/\1#Mark \2\n\1func \2/g
查找和替换模式详细信息位于演示