对不起,如果这听起来很愚蠢,请原谅这个新手 这是我的代码
line="abcd<>efgh->higk<-1234"
v1=$(echo ${line//<>/;})
echo $v1 --> outputs "abcd;efgh->hijk<-1234"
v2=$(echo ${v1//->/})
echo $v2 --> output "abcd;efghhijk<-1234"
echo ${$v2//<-/} --> output "abcd;efghhijk1234"
没有将输出存储到中间变量我可能知道如何实现此输出 的 ABCD; efghhijk1234
感谢您的时间
答案 0 :(得分:3)
您可以使用sed
和管道|
来分隔替换命令:
line="abcd<>efgh->highk<-1234"
v1=$(echo ${line} | sed 's|<>|;|g' | sed 's|->||g' | sed 's|<-||g')
echo $v1
以上将输出所请求的abcd;efghhijk1234
。
或者,如果您不想使用多个sed
命令,可以将它们全部与-e
选项结合使用:
v1=$(echo $line | sed -e 's/<>/;/g' -e 's/->\|<-//g');
注意:我已将sed
模式中使用的分隔符更改为第二个命令中的|
到/
。
答案 1 :(得分:1)
你不能用bash参数扩展在一行中完成所有操作,但你可以利用bash的扩展模式匹配来删除&lt; - 和 - &gt;在同一时间。
shopt -s extglob
line="abcd<>efgh->higk<-1234"
v1=${line//<>/;}
v2=${v1//@(->|<-)}
由于两个项目都被替换为相同的替换文本(空字符串),因此您可以匹配其中任何一个的所有匹配项。