awk/sed折线如何固定和移动一些线

awk/sed折线如何固定和移动一些线,sed,awk,Sed,Awk,我有几行是断开的,我想把这些行移到前一行 我需要帮助来修复此文件文本 资料来源: 预期结果: Path : Microsoft.PowerShell.Core\FileSystem::\\eiesc1\Service_Legal Access : BUILTIN\Administrators Allow FullControl ----------------------- Path : Microsoft.PowerShell.Core\FileSy

我有几行是断开的,我想把这些行移到前一行

我需要帮助来修复此文件文本 资料来源:

预期结果:

    Path   : Microsoft.PowerShell.Core\FileSystem::\\eiesc1\Service_Legal 
    Access : BUILTIN\Administrators Allow  FullControl
    -----------------------
    Path   : Microsoft.PowerShell.Core\FileSystem::\\eiesc1\balco 
    Access : Everyone Allow  FullControl
             Everyone Allow  268435456
    -----------------------
    Path   : Microsoft.PowerShell.Core\FileSystem::\\eiesc1\BCDRPlanning 
    Access : Everyone Allow  FullControl
             Everyone Allow  268435456
    -----------------------

我只能运行
awk”/Path/{a=1;next}/Access/{a=0}a“
来查找哪些行是断开的,但我不知道如何向上移动这些行

您想推迟打印
路径
行,直到看到下一行,如果下一行不是
访问
行,那么您想同时打印这两行

比如:

/Path/ {
    a=$0
    next
}

a && !/Access/ {
    gsub(/^ */, "")
    printf "%s",a
    print
    a=""
    next
}

1

如果路径跨越多条线,这是否有效?从这个问题上看,这并不明确,但看起来这是可能的……不是书面的。你可以通过继续积累到一个想法中来实现这一点,只有当你看到Access时才打印。奇怪的是,当我尝试这个方法时,我发现了两个问题。首先,
Path
似乎不在字符串的开头(在示例文件中,前面有空白);这在两行之间留下了一些空间。这两种情况都可能是由复制/粘贴操作中引入的不需要的空格引起的。你将如何修改它以处理每行的前导空格?我将把答案保留为“variable”。那能做到吗?像
[]+
这样的简单方法代替固定的空格串似乎不起作用…@Floris:
sed'/^*Path/{N;/^*Access/!s/\N*/;}'
I get
s:event not found
。。。我用
\”修复了它!s
;但是现在“未中断”的路径线与它后面的访问线连接起来。这是我的
sed
?(Mac OS 10.7.5)@Floris:我不确定。我所能建议的就是研究这个命令,理解它为什么应该工作,然后尝试使用更简单的命令,直到找到问题的根源。
/Path/ {
    a=$0
    next
}

a && !/Access/ {
    gsub(/^ */, "")
    printf "%s",a
    print
    a=""
    next
}

1
sed '/^Path/{N;s/\n         //;}'