如何使用sed命令删除文本文件每行CALL之前的内容?
没问题,用sed搞定这个需求超简单!我给你几个实用的写法,你可以根据自己的具体场景来选:
1. 基础用法(单行单个CALL场景)
如果你的文件里每行只有一个CALL,或者你想保留最后一个CALL及后面的内容,直接用这个命令:
sed 's/^.*CALL/CALL/' your_file.txt
这个命令的逻辑是:用s/匹配内容/替换内容/的替换规则,^.*CALL会匹配从行首到最后一个CALL的所有字符,然后把它们替换成CALL,这样就删掉了CALL之前的所有内容,保留CALL和后面的部分。
2. 直接修改原文件
如果你不想把结果输出到终端,而是直接修改原文件,可以加-i参数(原地编辑):
# GNU sed(Linux系统) sed -i 's/^.*CALL/CALL/' your_file.txt # BSD sed(macOS系统),注意要加空字符串避免生成备份文件 sed -i '' 's/^.*CALL/CALL/' your_file.txt
3. 保留第一个CALL及后面所有内容
如果你的行里可能有多个CALL,想要保留第一个CALL和它后面的所有内容(包括其他CALL),可以用扩展正则的非贪婪匹配:
# GNU sed 或 BSD sed(加-E启用扩展正则) sed -E 's/^.*?CALL/CALL/' your_file.txt
这里的.*?是非贪婪匹配,会只匹配到第一个CALL为止,不会吃掉中间的其他CALL。
预览效果小技巧
不管用哪个命令,先不带-i参数运行,结果会直接输出到终端,你可以先确认效果没问题,再用-i修改原文件。
举个实际例子:
原内容:
Preceding text CALL some content
Line with CALL first CALL second CALL last
用基础命令处理后:
CALL some content
CALL last
用非贪婪命令处理后:
CALL some content
CALL first CALL second CALL last
内容的提问来源于stack exchange,提问作者Incog Nito
相关产品推荐
相关产品推荐

