我有一个字符串: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
,但仍无法正确弄清楚如何提取和替换字符串。
答案 0 :(得分:1)
如果您有以下code
文件:
<强> INPUT:强>
$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
查找并替换demo 答案 1 :(得分:1)
使用sed:
$ sed 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
如果要替换文件:
$ sed -i 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
答案 2 :(得分:1)
使用GNU awk为第3个arg匹配():
$ awk 'match($0,/\<func\s+([^(]+)\(/,a){print "#Mark", a[1]} 1' file
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
答案 3 :(得分:0)
关注awk
也可以帮助您。
awk '/func/ && /showProductsList\(/{print " #Mark showProductsList" ORS $0;next} /func/ && /showFetchNextSliceFailed\(/{print " #Mark showFetchNextSliceFailed" ORS $0;next} 1' Input_file
现在也添加非单线形式的解决方案。
awk '
/func/ && /showProductsList\(/{
print " #Mark showProductsList" ORS $0;
next}
/func/ && /showFetchNextSliceFailed\(/{
print " #Mark showFetchNextSliceFailed" ORS $0;
next}
1
' Input_file
如果您想将输出保存到Input_file,那么您也可以将> temp_file && mv temp_file Input_file
附加到上面的代码中。
答案 4 :(得分:-1)