我有文件
0::question#1::
Love
giberrish fdfd
1::anything#2:
Is
repeat
22::anything#3::
Lie
我想提取
Love
giberish
****
Is
repeat
****
Lie
cat file.txt | sed 's/::\n([^\n]*)/\1/g'
我得到的文件是
0::question#1::
Love
1::anything#2:
Is
22::anything#3::
Lie
测试正则表达式是否匹配 https://regex101.com/
更新 我忘了说了,文件提取是针对多行的,而不是单行的,而且我还想要一个分隔符。很抱歉给您带来麻烦
cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*//g;/^$/d'
我得到的输出为
Love
giberrish fdfd
Is
repeat 2 4 4
Lie
因此我添加了一些内容deliminator
,以便将一条记录与另一条记录分开
cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/***/g;/^$/d'
并得到
***
Love
giberrish fdfd
***
Is
repeat 2 4 4
***
Lie
为了删除顶线我使用
cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/ ***/g;/^$/d' | tail -n +2
新的输出是
Love
giberrish fdfd
***
Is
repeat 2 4 4
***
Lie
我想使用awk
i did捕获每条记录
cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/ ***/g;/^$/d' | tail -n +2 | awk 'BEGIN{ RS = "" ; FS = "***" }{print $1}'
我得到输出
Love
giberrish fdfd
我无法删除所有字段中相同的最后一个空行,我尝试使用管道符 sed 但/^$/d
没有成功
更新2 让它工作
``sed 's/^.::.//g;/^$/d' | tail -n +2 | awk'BEGIN{ RS =“”; FS =““}{打印$1}'|sed-e'/^$/d'`
答案1
sed '/^[0-9]/d; /^$/d' file.txt
Love
Is
Lie
/^[0-9]/d
:删除以数字开头的行/^$/d
:删除空行
答案2
使用匹配行的方法然后删除那些匹配的行然后删除空格......
sed -e '/^.*::.*/d' -e '/^$/d' data.txt
结果:
Love
Is
Lie
或者更短的版本:
sed -E '/^(.*::.*)?$/d'
信息:
'/^.*::.*/d'
:匹配行::
并删除它们'/^$/d'
:删除所有空白行