Bash
用 bash 提取和替換字元串
我有一個像這樣的字元串:
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,但仍然無法正確弄清楚如何提取和替換字元串。
和
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]>) { }
如果您有以下
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
展示中詳細介紹的查找和替換模式