Regex 用bash提取并替换字符串
我有这样一个字符串:Regex 用bash提取并替换字符串,regex,bash,shell,sed,grep,Regex,Bash,Shell,Sed,Grep,我有这样一个字符串:func showFetchNextSliceFailed(结果:UserResult){ 从这个,我想, 1) .extract justshowFetchNextSliceFailed 2) 。将其插入给定行的正上方,如#标记showFetchNextSliceFailed func showProductsList(result: UserResult<[Product]>) { } func showFetchNextSli
func showFetchNextSliceFailed(结果:UserResult){
从这个,我想,
1) .extract justshowFetchNextSliceFailed
2) 。将其插入给定行的正上方,如#标记showFetchNextSliceFailed
func showProductsList(result: UserResult<[Product]>) {
}
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
func showProductsList(结果:UserResult){
}
func showFetchNextSliceFailed(结果:UserResult){
}
预期输出:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
$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]>) {
}
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
我尝试了grep
和sed
,但仍然无法正确地提取和替换字符串。Regex:func\s(\w+)
替换为:\Mark\1\n func\1
Regex:func\s(\w+)
替换为:\Mark\1\n func\1
如果您有以下
code
文件:
输入:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
$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]>) {
}
输出:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
$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]>) {
}
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
说明:
就地模式,用于备份输入文件的-i.bak
perl
查找和替换模式详细信息,请参见s/^(*124;\ t*)func\s(\w+)func\s(\w+)/\1#标记\2\n\1func\2/g
code
文件:
输入:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
$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]>) {
}
输出:
#Mark showProductsList
func showProductsList(result: UserResult<[Product]>) {
}
#Mark showFetchNextSliceFailed
func showFetchNextSliceFailed(result: UserResult<[Product]>) {
}
$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]>) {
}
#标记showProductsList
func showProductsList(结果:UserResult){
}
#标记showFetchNextSliceFailed
func showFetchNextSliceFailed(结果:UserResult){
}
说明:
就地模式,用于备份输入文件的-i.bak
perl
查找和替换模式详细信息,请参见s/^(*124;\ t*)func\s(\w+)func\s(\w+)/\1#标记\2\n\1func\2/g
- 遵循
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
如果您想将输出保存到输入文件中,那么您可以将
>临时文件和&mv临时文件输入文件
附加到上述代码中。以下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
如果您想将输出保存到输入文件中,则可以将临时文件和mv临时文件输入文件附加到上述代码中。使用sed:
$ sed 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
如果要在文件中替换,请执行以下操作:
$ sed -i 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
使用sed:
$ sed 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
如果要在文件中替换,请执行以下操作:
$ sed -i 's/\(.*func \)\([^ ]*\)\((.*\)/#Mark \2\n\1\2\3/' file.txt
使用GNU awk匹配第三个参数()
$awk'匹配($0,/\)第三个要匹配的参数的GNU awk()
$awk'匹配($0,/\尝试使用grep和sed
请添加尝试提问的内容。您现在应该知道,SO要求您在提问时显示(而不是告诉):)不要交叉发帖:我们回答了你的问题吗?请展示你的问题。我们这里的大多数人都很乐意帮助你改进你的技能,但不太乐意担任短期无薪编程人员。向我们展示你迄今为止的工作,你期望的结果和你得到的结果,我们将帮助你解决。这可能有助于重新设计ad.为什么要使用bash
而不是更强大的字符串处理语言,如perl或python?尝试了grep和sed
请添加问题的尝试。您现在应该知道,这要求您在提问时显示(而不是告诉):)不要交叉发帖:我们回答了你的问题吗?请展示你的问题。我们这里的大多数人都很乐意帮助你改进你的技能,但不太乐意担任短期无薪编程人员。向我们展示你迄今为止的工作,你期望的结果和你得到的结果,我们将帮助你解决。这可能有助于重新设计为什么要使用bash
而不是更强大的字符串处理语言,比如perl或python?