如何替换TXT文件每行中匹配文本的首个实例?
替换TXT文件每行中匹配字符串的首次出现
嘿,这个需求用sed命令就能轻松搞定——它默认的替换行为就是只处理每行里匹配字符串的第一次出现,完美贴合你的需求!
核心命令示例
假设你要把每行里的/Volumes/Documents - Part 1/首次出现的内容替换成/Your/Target/Path/,可以这么写:
sed 's#/Volumes/Documents - Part 1/#/Your/Target/Path/#' foo.txt > new_foo.txt
命令细节解释
s/old/new/是sed的替换语法,默认只替换每行第一个匹配的old字符串,这正是你要的效果- 这里我用
#作为分隔符,避免和路径里的/冲突,省去了转义的麻烦;如果你习惯用/当分隔符,记得给路径里的/加转义符\,比如:sed 's/\/Volumes\/Documents - Part 1\//\/Your\/Target\/Path\//' foo.txt > new_foo.txt
直接修改原文件(谨慎操作!)
如果你想直接修改原文件而不是输出到新文件,记得先备份!然后用-i参数:
- Linux系统:
sed -i 's#/Volumes/Documents - Part 1/#/Your/Target/Path/#' foo.txt - macOS系统:
sed -i '' 's#/Volumes/Documents - Part 1/#/Your/Target/Path/#' foo.txt
效果演示
拿你给出的行举例:
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Volumes/Documents - Part 1/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
替换后会变成:
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Your/Target/Path/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
可以看到只有第一个目标路径被替换,后面的完全保留。
注意事项
如果你的匹配字符串里包含正则特殊字符(比如.、*、+),记得用\转义,比如要匹配BU.,就得写成BU\.。
内容的提问来源于stack exchange,提问作者leetbacoon
相关产品推荐
相关产品推荐

