Replace sed awk使用模式匹配替换线条

Replace sed awk使用模式匹配替换线条,replace,awk,sed,Replace,Awk,Sed,使用awk或sed,在模式匹配后如何替换每条线? 模式总是以S:\和其他形式开始, 我需要从S:\~到结尾的整行显示在空行之前的下一行中 我有这样一个输入: S:\dir1\subfolder1longsubf abcdefg 1234567 permissions S:\dir2\verylongsub some random string some random string S:\dir3 some random string some random string S:\dir4\s

使用awk或sed,在模式匹配后如何替换每条线? 模式总是以S:\和其他形式开始, 我需要从S:\~到结尾的整行显示在空行之前的下一行中

我有这样一个输入:

S:\dir1\subfolder1longsubf
abcdefg
1234567
permissions

S:\dir2\verylongsub
some random string
some random string

S:\dir3
some random string
some random string

S:\dir4\sub2\sub3
some random string
some random string
some random string
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf

S:\dir2\verylongsub
S:\dir2\verylongsub
S:\dir2\verylongsub

S:\dir3
S:\dir3
S:\dir3

S:\dir4\sub2\sub3
S:\dir4\sub2\sub3
S:\dir4\sub2\sub3
S:\dir4\sub2\sub3
我需要这样的输出:

S:\dir1\subfolder1longsubf
abcdefg
1234567
permissions

S:\dir2\verylongsub
some random string
some random string

S:\dir3
some random string
some random string

S:\dir4\sub2\sub3
some random string
some random string
some random string
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf
S:\dir1\subfolder1longsubf

S:\dir2\verylongsub
S:\dir2\verylongsub
S:\dir2\verylongsub

S:\dir3
S:\dir3
S:\dir3

S:\dir4\sub2\sub3
S:\dir4\sub2\sub3
S:\dir4\sub2\sub3
S:\dir4\sub2\sub3

我会使用
awk

awk '/^S/ {line=$0} {print NF?line:""}' file
这将存储以
S
开头的行。然后,它打印存储的值,如果行为空,则打印空行

试验
我会使用
awk

awk '/^S/ {line=$0} {print NF?line:""}' file
这将存储以
S
开头的行。然后,它打印存储的值,如果行为空,则打印空行

试验 使用GNU时:

sed  '/^S:/{h};/^[^S]/{g}' file
使用GNU时:

sed  '/^S:/{h};/^[^S]/{g}' file

这假定空行中根本不包含空格。更安全的解决方案是不使用空行:
sed'/^\s*$/b/^S:\\/h;//!g'文件
这假定空行完全不包含空格。更安全的解决方案是不使用空行:
sed'/^\s*$/b/^S:\\/h;//!g'文件