假设我有一个TXT文件:
line 1
some text ABC
line 3
line 4
XYZ
我想删除ABC和XYZ之间的所有内容,包括这两个字符串,因此结果应为
line 1
some text
我使用以下命令
find . -type f -name "*.txt" -exec sed -i '/ABC/,/XYZ/d' {} \;
但它也删除了“一些文本”部分,结果是
line 1
如何调整正则表达式?
这是这个问题的一个修正:Find and replace multiple line string using SSH作为答案,删除整行。
3条答案
按热度按时间qfe3c7zg1#
此
sed
可能适合您:细目:
/ABC/,/XYZ/
:在模式ABC
和XYZ
之间运行{
:动作块开始/ABC/!d;
:如果行没有ABC
,则将其删除s///;
:将搜索模式ABC
替换为空字符串}
:操作块结束uplii1fm2#
使用GNU
sed
e4eetjau3#
这可能对您有用(GNU sed):
收集以字符串
ABC
开头、以字符串XYZ
结尾的行。将
ABC
替换为与XYZ
完全匹配的最后一个字符串。注意:
.*
是贪婪的,如果最后一行包含两个或更多字符串XYZ
,可能会删除太多,在这种情况下,使用: