bash - 匹配由两个不同模式界定的文本块中的模式
问题描述
有没有办法匹配文本块中的模式,其边界是不同行上的两个独特模式?我的意思是:
/*some comment*/
void something_patternWord1()
{
some_code;
some_code;
some_code_patternWord3;
some_code;
}
/*some comment patternWord2
期望的输出:
/*some comment*/
void something_patternWord1()
{
some_code;
some_code;
new_line_of_some_code; //after performing sed command
some_code_patternWord3;
some_code;
}
/*some comment patternWord2
我试过的:
sed '/patternWord1/,/patternWord2/{/patternWord3/i new_line_of_some_code;}' inputFile > outputFile
上面的命令似乎不起作用。
最终,我想要实现的是使用bash
脚本,从.csv
文件中读取一些东西,如果读入的单词是someWord
然后搜索以patternWord1
and为界的文本块,在该文本块内patternWord2
匹配patternWord3
并在其上方插入一些代码.
我有许多.cpp
具有许多不同功能的文件,因此有许多不同patternWord1
和patternWord2
.
我正在尝试做的事情是否可能sed
,并且是sed
此类事情的最佳工具?
也许是另一种方法:我是否可以在将脚本读取到文件if-then
中时使用语句,然后使用命令匹配并插入新的代码行?bash
.cpp
sed
patternWord3
如果您能帮助我sed
,那就太好了,但如果它更有意义/更有效,我也愿意接受其他建议。先感谢您。
解决方案
这里的重点是告诉插入命令在哪里停止。
您可以通过多种方式进行操作,或者将插入的字符串放在新行上,或者通过使用'
插入行结束的位置关闭 sed 命令。
您可以使用
sed -e '/patternWord1/,/patternWord2/{/patternWord3/i\
new_line_of_some_code;
}'
或者,
sed -e '/patternWord1/,/patternWord2/{/patternWord3/i \ \ \ new_line_of_some_code;' -e '}' inputFile > outputFile
查看在线演示:
s='/*some comment*/
void something_patternWord1()
{
some_code;
some_code;
some_code_patternWord3;
some_code;
}
/*some comment patternWord2'
sed -e '/patternWord1/,/patternWord2/{/patternWord3/i \ \ \ new_line_of_some_code;' -e '}' <<< "$s"
输出:
/*some comment*/
void something_patternWord1()
{
some_code;
some_code;
new_line_of_some_code;
some_code_patternWord3;
some_code;
}
/*some comment patternWord2
推荐阅读
- node.js - 成功加入后,我在哪里可以获得供应商条带帐户 url 页面?
- c++ - 如何获取当前DLL的目录
- c++ - C++ 双指针赋值
- python - 如何更改 kivymd 的 MdTextField 中的前景色?
- phpunit - 如何检查 Laravel 刀片组件是否已加载?
- r - 闪亮的应用程序与服务器断开连接。没有错误
- c++ - 为什么 code::blocks 在编译 C++ 文件时出现问题
- python - 如何在 Web IDE 中使用 IPython 模块
- android - > 任务 :app:transformDexArchiveWithDexMergerForRelease 失败(重复类问题)
- java - 如何将微调器中的 Integer[] 转换为 int 或 Integer 以进行计算