[英]sed awk replace lines with a pattern match
With awk or sed how could I replace each line after a pattern match? 使用awk或sed,如何在模式匹配后替换每一行? the pattern would always start as S:\\ and something else, I need the entire line from S:\\~ to the end to appear on the next lines before a blank line. 模式将始终以S:\\开头,我需要从S:\\〜到整行都显示在空白行之前的下一行中。
I have an input like this: 我有这样的输入:
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
and I need an ouput like this: 我需要这样的输出:
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
I would use awk
: 我会用awk
:
awk '/^S/ {line=$0} {print NF?line:""}' file
This stores the line starting with S
. 这将存储以S
开头的行。 Then, it prints either this stored value or an empty line if the line is empty. 然后,它打印此存储的值,或者如果该行为空,则打印一个空行。
$ awk '/^S/ {line=$0} {print NF?line:""}' file
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
使用GNU sed:
sed '/^S:/{h};/^[^S]/{g}' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.