【问题标题】:Replace spaces and / between two brackets in bash替换bash中两个括号之间的空格和/
【发布时间】:2021-03-05 13:23:21
【问题描述】:

我有这个(文本)文件:

[check consumer TAIL_SCE_O_P]
[CheckCo on IEB02]
[CheckSubscribers consumers for ne/os/jms/queue/FT_PN_IN]
[CheckSubscribers consumers for ne/os/jms/queue/SO_IN]
Please do not change/me/thank/you
another bracketless text

我想将空格 () 和 / 替换为括号之间的 -

示例输出:

[check-consumer-TAIL_SCE_O_P]
[CheckCo-on-IEB02]
[CheckSubscribers-consumers-for-ne-os-jms-queue-FT_PN_IN]
[CheckSubscribers-consumers-for-ne-os-jms-queue-SO_IN]
Please do not change/me/thank/you
another bracketless text

我试过这个:

cat output.txt |grep "\[" | sed 's/\ /-/g'

但它改变了很多。

【问题讨论】:

  • 是否要将所有以[ 开头的行中的空格和/ 替换为-
  • 是的。这对我来说没问题。
  • @ZoliloZ :一对括号的期望行为是什么,其中左括号和右括号在不同的行中?

标签: bash sed replace brackets


【解决方案1】:

你可以使用

sed '/^\[.*]$/s/[[:space:]\/]/-/g' file
# => 
# [check-consumer-TAIL_SCE_O_P]
# [CheckCo-on-IEB02]
# [CheckSubscribers-consumers-for-ne-os-jms-queue-FT_PN_IN]
# [CheckSubscribers-consumers-for-ne-os-jms-queue-SO_IN]
# Please do not change/me/thank/you
# another bracketless text

意思是:

  • /^\[.*]$/ - 查找以[ 开头并以] 结尾的行
  • s/[[:space:]\/]/-/g - 在该行中,将空格或 / 替换为 -

an online sed demo

【讨论】:

    【解决方案2】:

    输入数据:

    $ cat output.txt
    [check consumer TAIL_SCE_O_P]
    [CheckCo on IEB02]
    [CheckSubscribers consumers for ne/os/jms/queue/FT_PN_IN]
    [CheckSubscribers consumers for ne/os/jms/queue/SO_IN]
    Please do not change/me/thank/you
    another bracketless text
    

    一个sed解决方案:

    $ sed '/\[/,/]/{s/[ /]/-/g}' output.txt
    

    地点:

    • /\[/ + , + /]/ - 范围的开始是左括号;范围的结尾是右括号
    • {s/[ /]/-/g} - 在范围内用连字符 (-) 替换所有空格 ( ) 和正斜杠 (/)

    以上生成:

    [check-consumer-TAIL_SCE_O_P]
    [CheckCo-on-IEB02]
    [CheckSubscribers-consumers-for-ne-os-jms-queue-FT_PN_IN]
    [CheckSubscribers-consumers-for-ne-os-jms-queue-SO_IN]
    Please do not change/me/thank/you
    another bracketless text
    

    【讨论】:

    • /\[/,/]/ 也将用一个大括号替换行。它以左括号开始,并以右括号结束另一行。你想要/\[.*]/ - 匹配两个括号。
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多