【问题标题】:Bash sed: replace tag within square bracketsBash sed:替换方括号内的标签
【发布时间】:2018-02-26 21:23:36
【问题描述】:

在一个 bash 脚本(新手到 bash)中,我有一个像这样的变量:"this is a message [REL]",我想把它转换成这个:"this is a message"

我尝试了原生 bash 字符串操作,例如 CLEAN_MESSAGE=${MESSAGE#REL},但没有成功,所以我尝试使用 sed,我关注了一些类似这样的帖子:How to replace paired square brackets with other syntax with sed? 但没有运气

这是我目前的状态:

MESSAGE=$(cat $1) #A message with a tag [REL]
RELTAG=\[[REL]\] #A variable with regexp for tag, tryed \[REL\], \[(REL)\], \[\(REL\)\] and other variants
CLEAN_MESSAGE=$(echo "$MESSAGE" | sed "s/$RELTAG//") 
echo $CLEAN_MESSAGE

对于 RELTAG 的某些变体,我得到 EL][RE,但从未删除完整的标签。

帮助?

【问题讨论】:

  • 试试sed 's/\[[^]]*\]//'

标签: bash sed


【解决方案1】:

使用% 删除字符串的末尾

$ s='this is a message [REL]'
$ echo "${s% \[REL]}"
this is a message

$ # if variable contains the removal glob
$ r=' \[REL]'
$ echo "${s%$r}"
this is a message

wooledge Parameter Expansion进一步阅读

【讨论】:

  • 谢谢,为什么需要调整左括号而不是右括号?
  • @K.Weber 我想这是因为[ 表示字符类的开始......如果不存在,则无需担心] 是特殊的......
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2018-03-21
  • 2018-10-19
  • 1970-01-01
  • 2016-11-25
  • 2021-04-26
  • 2016-07-25
  • 2015-02-26
相关资源
最近更新 更多