答案:(稍作修改...)感谢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"
一种简单的方法是:
]
]
如果后面跟一个字符,请在后面插入一个换行符[
[
前面有一个字符,请在其前面插入换行符因此,您可以使用以下表达式:
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] 删除。
我来说两句