Linux中移除文件名根目录:如何用sed/awk改写指定路径?
用sed或awk移除路径开头的
/home/当然可行! 完全可以用sed或者awk快速实现这个路径修改需求,下面给你两种工具的具体操作方法:
方法一:使用sed命令
sed最擅长文本替换,我们可以用正则匹配行首的/home/并将其替换为空:
# 直接处理单个路径字符串 echo "/home/edwprod/abortive_visit/bin/abortive_proc_call.ksh" | sed 's/^\/home\///'
执行后输出就是:
/edwprod/abortive_visit/bin/abortive_proc_call.ksh
如果要批量处理文件里的所有这类路径,直接加-i参数原地修改文件(注意:-i会直接修改原文件,建议先备份):
sed -i 's/^\/home\///' your_file.txt
命令解释:
s/pattern/replacement/:sed的核心替换语法^\/home\/:正则匹配行首的/home/(^表示行首,\/是对/的转义,因为sed里/是语法分隔符)- 空的替换目标表示把匹配到的内容直接删掉
方法二:使用awk命令
awk同样可以通过字符串替换完成这个操作,用内置的sub()函数匹配并替换:
# 处理单个路径字符串(完整写法) echo "/home/edwprod/abortive_visit/bin/abortive_proc_call.ksh" | awk '{sub(/^\/home\//, ""); print}' # 更简洁的写法(awk中1表示执行默认动作:打印当前行) echo "/home/edwprod/abortive_visit/bin/abortive_proc_call.ksh" | awk '{sub(/^\/home\//, "")}1'
输出结果和sed的完全一致。如果要处理文件,这样写:
# 输出到新文件(保留原文件) awk '{sub(/^\/home\//, "")}1' your_file.txt > updated_file.txt # 如果你的awk支持原地编辑(比如GNU awk),可以直接修改原文件: awk -i inplace '{sub(/^\/home\//, "")}1' your_file.txt
命令解释:
sub(/pattern/, replacement):默认作用于当前行$0,只替换第一个匹配的内容{sub(...)}1:先执行替换操作,1触发awk的默认打印动作,省去单独写print的麻烦
这两种方法都能精准移除路径开头的/home/,你可以根据自己的使用场景选择~
内容的提问来源于stack exchange,提问作者Dinesh Prabhu
相关产品推荐
相关产品推荐

