使用sed来匹配anyString和[之间的任何字符和回车符

蓟结

答案:(稍作修改...)感谢0xdeadbeef

sed -e "s/\t//g" -e "s/(?m)^\s*//g" -e "s/\]\(.\)/]\r\1/g;s/ *\[/[/g;s/\(.\)\[/\1\r[/g" %%~na.txt > %%~na.out

我想我需要深入研究以前的问题。

我正在使用 sed -e

到目前为止,这是它的作用

sed -e "s/[^[]*/$1/g"

它取代任何匹配anyString[$1[

我想使用一个正则表达式变量,该变量将anyString的值保存为$1(我$1之所以使用,因为这是powershell保持变量的方式),然后将其重新注入$1NEWLINE[

newline是换行符。

老问题:

对于某些人一直在帮助我的数据,我有一个非常具体的要求。

我有一个使用正则表达式在Powershell中工作的脚本,然后有人重写了它,但是它仍然不能满足我的需要。

powershell regexp替换* [('任何字符''左括号']并替换为*`n [('任何字符''换行''左括号')

有人建议我将其移植到linux命令行工具。所以我选择了sed vs powershell。

我们使用了一个有效的sed脚本

sed -e "s/^[^[]*//" -e "s/][^\[]*$/]/" -e "s/][^[]*\[/]\n\[/g"

但是...它具有清除非[令牌]数据的不良行为。

这是示例输入文件:

item_gloves

[OBJECT:ITEM]

###test###
    [ITEM_GLOVES:ITEM_GLOVES_GAUNTLETS]###test###[NAME:gauntlet:gauntlets]
###test###[ARMORLEVEL:2]
[UPSTEP:1]
###test###[SHAPED]
[LAYER:ARMOR]###test######test###[COVERAGE:100]###TEST
[LAYER_SIZE:20]
[LAYER_PERMIT:15]
[MATERIAL_SIZE:2]
[SCALED]
[BARRED]
[METAL]
[LEATHER]
[HARD]

这是输出的样子

item_gloves

[OBJECT:ITEM]

###test###
[ITEM_GLOVES:ITEM_GLOVES_GAUNTLETS]
###test###
[NAME:gauntlet:gauntlets]
###test###
[ARMORLEVEL:2]
[UPSTEP:1]
###test###
[SHAPED]
[LAYER:ARMOR]
###test######test###
[COVERAGE:100]
###TEST
[LAYER_SIZE:20]
[LAYER_PERMIT:15]
[MATERIAL_SIZE:2]
[SCALED]
[BARRED]
[METAL]
[LEATHER]
[HARD]

我在想我需要从这里借一些建议。如何匹配除特定字符以外的任何非空白字符?

并使用一些匹配任何字符匹配anyChar[]anyChar并插入新行

anyChar分别为*。

并删除所有前面的空格

我想我需要匹配一个通配符

并将其替换为某种东西,但是我却缺少如何将通配符数据保存为替换变量 sed -e "s/[^[]*//g"

0x死牛肉

一种简单的方法是:

  • 之后删除任何空格 ]
  • ]如果后面跟一个字符,请在后面插入一个换行符
  • 删除任何空格 [
  • 如果[前面有一个字符,请在其前面插入换行符

因此,您可以使用以下表达式:

sed 's/\] */]/g;s/\]\(.\)/]\n\1/g;s/ *\[/[/g;s/\(.\)\[/\1\n[/g' item_gloves

给定您的样本输入,这将产生以下输出:

[OBJECT:ITEM]

###test###
[ITEM_GLOVES:ITEM_GLOVES_GAUNTLETS]
###test###
[NAME:gauntlet:gauntlets]
###test###
[ARMORLEVEL:2]
[UPSTEP:1]
###test###
[SHAPED]
[LAYER:ARMOR]
###test######test###
[COVERAGE:100]
###TEST
[LAYER_SIZE:20]
[LAYER_PERMIT:15]
[MATERIAL_SIZE:2]
[SCALED]
[BARRED]
[METAL]
[LEATHER]
[HARD]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 C++17 字符类 [:blank:] 匹配换行符和回车符?

从文本中删除回车符和特殊字符

使用RegEx删除两个字符串之间的所有回车符和换行符

if 语句中的回车符和通配符

Swift字符串中的换行符和/或回车符

将换行符和回车符插入Swift字符串

快速字符串似乎一起处理回车符和换行符

保留换行符和回车符Powershell

替换空格,制表符和回车符

Vim:显示换行符和回车符

用逗号、换行符和回车符分割

如何使用Postgresql删除表中所有列的回车符和换行符?

回车符('\ n'和'\ r')未评估为特殊字符

如何从字符串中删除所有空格和回车符?

如何删除回车符和空格并将字符串正确存储在数组中?

如何替换由mysql和php制成的json字符串中的回车符?

“字符串”实用程序,包括换行(LF)和回车符(CR)

Ksh美元和回车符以字符串形式返回

CMD字符串变量多行输出,没有额外的空格和回车符

如何从字符串的开头和结尾删除新行,回车符和水平制表符?

javascript正则表达式中回车符,换行符和多个空格的匹配

VBA获取带有空白字符(例如换行符和回车符)的字符串的长度

C# 尽可能高效地从字符串中删除回车符、换行符和空格

Grep与回车符不匹配

Swift中未匹配回车符

用回车符替换字符-JavaScript

如何在VBS中使用正则表达式模式来匹配未在换行符或回车符之前或之后的逗号?

使用回车符插入数据

如何读取带有特殊分隔符和回车符的txt文件?