linux变量字符串替换问题

自定义path=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin
想要只把bin替换为BIN,sbin不替换。但按书本上这样写echo ${path/bin/BIN}结果却出现了sBIN。
请问怎么按要求处理呢?
最新回答
锁住浪漫

2024-11-30 08:42:46

换个角度,替换/bin为/BIN就不会有错啦

echo ${path/\/bin/\/BIN}

 其中/前面要加转义符\

 

或者用sed来替换,

echo $path | sed 's#/bin#/BIN#g'

格式为s#A#B#,将A替换为B。

后面加个g表示全局替换,即替换所有出现的。

也可以这样写:

echo $path | sed 's#[^s]bin#/BIN#g'

[^s]在正则中表示不是s的一个字符。这里只有两种情况,一种是sbin,一种是/bin,这样sbin就可以被排除了。

虚伪式↘纠情

2024-11-30 10:46:14

# sbin 也含有 bin , 
#转换一下思路呗, 替换 /bin 为 /BIN 就好了.
#如下只替换第一个/bin 为 /BIN
[c@c:~ ]$ echo ${path/\/bin/\/BIN}
/usr/kerberos/sbin:/usr/kerberos/BIN:/usr/local/sbin:/usr/local/bin
# 如下替换行中所有 /bin 为 /BIN
[c@c:~ ]$ echo ${path//\/bin/\/BIN}
/usr/kerberos/sbin:/usr/kerberos/BIN:/usr/local/sbin:/usr/local/BIN
追问
额额怎么都这样说的。。。
追答
呃....因为都对, 哈哈.
朝朝暮暮

2024-11-30 09:34:04

这个是很复杂的, 要用到很多命令,这样吧。发私信来看看?