如何用命令行删除文件中以指定字符串开头的所有词(以"end"为例)
如何用命令行删除文件中以指定字符串开头的所有词(以"end"为例)
嘿,我来帮你搞定这个问题!你想要移除文件里所有以end开头的词(比如例子里的end=423471这类),之前试的sed命令没生效,咱们来调整一下方案。
先说说你原来命令的问题
你用的sed 's/\S*\(end\|END\)\S*//g' file.txt,这个正则表达式的逻辑是匹配包含end或END的任意非空白字符串,但它不是专门匹配以end开头的词,甚至会把像xend123这种中间带end的词也删掉,而且顺序不对,自然达不到你想要的效果。
正确的sed命令写法
1. 只匹配小写end开头的词(和你的示例需求一致)
直接用这个命令就可以:
sed 's/\bend\S*//g' file.txt
\b:表示单词边界,确保我们匹配的是一个完整单词的开头,不会误删其他词里的end片段end:指定要匹配的前缀\S*:匹配end后面所有的非空白字符(也就是整个end=xxxx的部分)//g:全局替换,把一行里所有符合条件的词都删掉
2. 如果需要匹配大小写(比如END=xxx、End=xxx)
可以用大小写兼容的写法:
# 通用写法,所有sed版本都支持 sed 's/\b[Ee][Nn][Dd]\S*//g' file.txt # GNU sed可以用更简洁的大小写不敏感选项 sed -I 's/\bend\S*//g' file.txt
3. 直接修改原文件(不只是输出到终端)
如果想直接修改原文件内容,而不是只在终端看结果:
# GNU sed(Linux系统) sed -i 's/\bend\S*//g' file.txt # macOS系统的sed需要加空参数 sed -i '' 's/\bend\S*//g' file.txt
验证效果
用你的示例输入测试:
原行内容:
<region> sample=PDL UP IN-A-1.flac lokey=21 hikey=21 lovel=0 hivel=21 end=423471 pitch_keycenter=21
执行命令后得到:<region> sample=PDL UP IN-A-1.flac lokey=21 hikey=21 lovel=0 hivel=21 pitch_keycenter=21
完全符合你想要的结果哦!
备注:内容来源于stack exchange,提问作者black-clover
相关产品推荐
相关产品推荐

