首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止sed中的\S匹配标记(<p>,</p>)

阻止sed中的\S匹配标记(<p>,</p>)
EN

Stack Overflow用户
提问于 2020-08-23 21:48:30
回答 1查看 52关注 0票数 0

尝试在bash中创建自定义脚本:

代码语言:javascript
复制
GENDER=M
T='<p>He§She is a very handsome§beautiful man§woman</p>'
[[ $GENDER = M ]] && sed 's:§\S*::g' <<< "$T" || sed 's:\S*§::g' <<< "$T"

Output: <p>He is a very handsome man
Desired: <p>He is a very handsome man</p>

同样:

代码语言:javascript
复制
GENDER=F
T='<p>He§She is a very handsome§beautiful man§woman</p>'
[[ $GENDER = M ]] && sed 's:§\S*::g' <<< "$T" || sed 's:\S*§::g' <<< "$T"

Output: She is a very beautiful woman</p>
Desired: <p>She is a very beautiful woman</p>

有什么想法吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 22:01:53

这里的问题是,当您不希望\S匹配<>字符时,它却将其匹配。

从使用\S切换到POSIX字符类不仅使您的代码与更多版本的sed兼容,还允许您控制向这些类添加额外的字符,在本例中为<>

代码语言:javascript
复制
selectWords() {
  case $1 in
    M) sed 's:§[^[:space:]<>]*::g' <<<"$2" ;;
    *) sed 's:[^[:space:]<>]*§::g' <<<"$2" ;;
  esac
}

selectWords M '<p>He§She is a very handsome§beautiful man§woman</p>'
selectWords F '<p>He§She is a very handsome§beautiful man§woman</p>'

...properly emits

代码语言:javascript
复制
<p>He is a very handsome man</p>
<p>She is a very beautiful woman</p>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63547705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档