【问题标题】:Use sed with regular expression for space将 sed 与正则表达式一起用于空格
【发布时间】:2012-10-22 09:56:37
【问题描述】:

我正在尝试使用sed 替换字符串,同时考虑到空格。
示例:

Hello          World

替换为

Hello George  

我试过了:

sed -e 's/Hello[:space]+World/Hello George/' ./infile > outFile

但它不起作用。

我该如何解决这个问题?

【问题讨论】:

  • [:space:] 而不是[:space],我想。另外,[[:space:]],否则方括号会被误解。

标签: regex linux bash sed


【解决方案1】:
sed -e 's/Hello[[:space:]]\+World/Hello George/' ./infile > outFile

sed -e 's/Hello \+World/Hello George/' ./infile > outFile

注意:在 OSX 中,您需要

sed -E 's/Hello +World/Hello George/' ./infile > outFile

【讨论】:

  • 这行得通。有没有我更喜欢使用\+ 而不是[[:space:]] 的情况?它总是可用吗?
  • 我认为[[:space:]] 也包括标签,也许还有其他一些,而 ` 只是......好吧......单个空格。两者都应该始终可用(在 sed 中)
【解决方案2】:

也许你可以使用 perl:

perl -pe 's/Hello\s*World/Hello Goerge/g'

【讨论】:

    【解决方案3】:

    你可以使用

    sed -e 's/Hello\s\+World/Hello George/' ./infile > outFile
    

    空格的代码是\s,与\w 一样是单词字符。

    【讨论】:

    • 不,您没有必须使用该表单,[:space:] 也可以使用,并且在某些情况下更好(unicode、更改的语言环境等)
    • @alestanis:我上面已经解释过了。
    • @January 你说得对必须。我编辑了我的答案。
    • @alestanis: 但是+ 仍然存在问题,在“标准”sed 中,它是按字面意思解释的(要使用量词,您需要使用\+)。跨度>
    猜你喜欢
    • 2015-04-17
    • 2017-11-14
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2015-12-18
    • 2015-02-06
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多