sed awk 用模式匹配替换行
sed awk replace lines with a pattern match
使用 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
我会用 awk
:
awk '/^S/ {line=[=10=]} {print NF?line:""}' file
这将存储以 S
开头的行。然后,如果该行为空,它会打印此存储值或空行。
测试
$ awk '/^S/ {line=[=11=]} {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
使用 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
我会用 awk
:
awk '/^S/ {line=[=10=]} {print NF?line:""}' file
这将存储以 S
开头的行。然后,如果该行为空,它会打印此存储值或空行。
测试
$ awk '/^S/ {line=[=11=]} {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