正则表达式:如何将截断字符替换为给定字符?

时间:2012-08-08 15:36:27

标签: regex sed

我需要使用sed截断一切,包括一行中的某个字符(在本例中为])。

典型行:

*15:36:40,038 [Some text] More text ...*
*15:57:40,038 [123] More text ....*

放下另一个,直到]一无所获。实现这一目标的最佳途径是什么?

在提出建议时,我非常感谢对正则表达式(或使用bash cut命令)的解释,以进一步提高我的知识水平。

非常感谢

2 个答案:

答案 0 :(得分:1)

<强>解决方案

你必须这样做:

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

示例

$ echo 15:36:40,038 [Some text] More text ... | sed 's/[^]]*\]//'
More text ...

<强>解释

  • [^]]*表示除]
  • 之外的所有符号
  • \]表示]

答案 1 :(得分:0)

如果你想要切断所有内容直到最后一个“]”(例如还有更多[..]对)你可以尝试:

awk -F']' '{print $NF}' file

示例:

kent$  echo "15:36:40,038 [Some text] More text ... "|awk -F']' '{print $NF}'
 More text ... 


kent$  echo "15:36:40,038 [Some text] xxx yyy [some other foo] More text ... "|awk -F']' '{print $NF}'
 More text ... 

你的剪切示例:

kent$  echo "15:36:40,038 [Some text] More text ... "|cut -d] -f2                            
 More text ...