如果文件包含字符串则插入新行

如果文件包含字符串则插入新行

我需要在 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}'

首次出现方式sedhttps://stackoverflow.com/a/9970915/887325

  • find- 查找所有包含Reachability文本的文件;
  • cut- 唯一路径
  • xargs- 路径文件作为参数gsed
  • gsed- 找到第一import行包含 {i\ - 插入新行:import RxReachability

希望这个答案对90岁的我还有作用。

相关内容