使用awk,grep或sed基于分隔符而不是每行分割文件的内容

时间:2014-05-05 08:37:28

标签: sed split grep

假设我有一个包含此文件的文件:


! 
Title1 
     Data1 
! 
Title2
    Data1
    Data2
    Data3 
! 
Title3
    Data1
    Data2
    Data3 
! 
end 
!

我想拆分文件的内容并使用(!)标点符号作为分隔符。 使用awk我认为这是一个坏主意,因为根据我的观察,它逐行解析文件,这不是我需要的。请帮忙。感谢

2 个答案:

答案 0 :(得分:4)

awk可以使用!作为分隔符。

awk -vRS="[!]" 'NR==3' file

Title2
    Data1
    Data2
    Data3

此处打印记录编号3,如您所见,它不是一行。

答案 1 :(得分:1)

我认为awk比使用sedgrep的机会更大。例如,如果您的数据位于名为data的文件中,则为:

awk 'BEGIN{RS="!"} {print "[[" $0 "]]"}' data

产生

[[]]
[[ 
Title1 
     Data1 
]]
[[ 
Title2
    Data1
    Data2
    Data3 
]]
[[ 
Title3
    Data1
    Data2
    Data3 
]]
[[ 
end 
]]
[[
]]

唯一可以解决的部分是第一个分隔符之前的空记录和最后一个分隔符之后只有一个换行符的记录。消除这两个记录并不难。