如何在Shell脚本中删除子字符串

3

我有一个字符串,格式如下:

something0^^^something1^^^something2^^^something3

我只想要字符串

something0^^^something1^^^something2

通过移除

^^^something3

如何在shell脚本中获取它?
3个回答

3

使用纯BASH:

s='something0^^^something1^^^something2^^^something3'
echo "${s/^^^something3/}"
something0^^^something1^^^something2

或者您可以删除最后一个^^^之后的所有内容:

echo "${s%^^^*}"
something0^^^something1^^^something2

1
为什么要让它变得复杂,当bash可以做到呢 :) +1 - Jotne

0
一个 awk 版本
awk -F, '{gsub(/\^\^\^/,",");NF-=1}1' OFS="^^^"
something0^^^something1^^^something2

通过将FS更改为其他内容进行修复


另一个版本
awk '{sub(/\^\^\^[^\^]*$/,x)}1' file
something0^^^something1^^^something2

抱歉,先生,我不知道something3的值,它可能会变化。 - Dinesh Dabhi
1
我认为OP想要的是:something0^^^something1^^^something2 - anubhava
@Jotne:尝试这个:awk 'BEGIN {FS="\\^\\^\\^"; OFS="^^^"} {NF-=1}1' file - anubhava
@anubhava 谢谢,看到我的更新答案了吗?似乎也可以工作。似乎需要BEGIN块才能让FS接受\\ - Jotne
是的,因为插入符号 FSOFS 是分开的,FS=OFS=... 不起作用。使用 sub function 就可以了。 - anubhava
显示剩余3条评论

0
perl -pe 's/\^\^\^something3//g' your_file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接