我需要在 imports 后的行中插入“import packagename”。在包含特定单词的文件中。我尝试:
find iOS/Chat \
-type f \
-name "*.swift" \
-exec gsed -e "/Behavior/ " -e "20a import RxSwift" -i {} +;
也尝试过:-exec gsed -e "/Behavior/20a import RxSwift" -i {} +;
看起来这个构造不起作用。
gsed - gnused,我没有找到如何与 bsd sed 一起工作。mac os。
UPD:结果接近
find iOS/Chat -type f -name "*.swift*" -exec grep -iHn "Behavior" {} \; | cut -d: -f-1 | xargs gsed -i '/import Foundation/a import RxSwift'
缺点:
- 如果设置
gsed -i '/import/a import RxSwift' its called for each import enter line. I want only first. Something like:
gsed -i '0,/import/a import RxSwit'` 对我来说不起作用......
仍在调查....
答案1
好的,我找到解决方案了。
brew install gsed
- 需要
find ./ \
-type f \
-name "*.swift*" \
-exec grep -lHn "Reachability" {} \; | cut -d: -f-1 | xargs gsed -i -e '/import/{i\import RxReachability' -e ':a;n;ba}'
首次出现方式sed
:https://stackoverflow.com/a/9970915/887325
find
- 查找所有包含Reachability
文本的文件;cut
- 唯一路径xargs
- 路径文件作为参数gsed
gsed
- 找到第一import
行包含 {i\ - 插入新行:import RxReachability
希望这个答案对90岁的我还有作用。