Bash 用sed省略最后一行
我有以下文件内容Bash 用sed省略最后一行,bash,sed,awk,Bash,Sed,Awk,我有以下文件内容 2013-07-30调试 第1行 2013-07-30信息 第2行 第3行 2013-07-30调试 第4行 第5行 我想使用sed获得以下输出 2013-07-30信息 第2行 第3行 这个命令几乎提供了我想要的输出 sed-n'/info/I,/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/{p}myfile.txt 2013-07-30信息 第2行 第3行 2013-07-30调试 如何省略这里的最后一行?试试: sed -n '/info/I
2013-07-30调试
第1行
2013-07-30信息
第2行
第3行
2013-07-30调试
第4行
第5行
我想使用sed
获得以下输出
2013-07-30信息
第2行
第3行
这个命令几乎提供了我想要的输出
sed-n'/info/I,/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/{p}myfile.txt
2013-07-30信息
第2行
第3行
2013-07-30调试
如何省略这里的最后一行?试试:
sed -n '/info/I p; //,/[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}/{ //! p}' myfile.txt
它打印第一个匹配项,并且在范围内忽略两条边,但第一条边已打印,因此只跳过第二条边。它产生:
2013-07-30 info
line2
line3
在我看来,sed一旦需要添加条件就开始变得笨拙。我知道你没有给问题加上标签,但这里有一个awk程序,只打印“信息”部分
awk -v type="info" '
$1 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/ {p = ($2 == type)}
p
' myfile.txt
这可能适用于您(GNU-sed):
或者,如果您愿意:
sed '/info/I{:a;n;/^....-..-.. /!ba;s/^/\n/;D};d' file
注意:这适合连续模式那么
awk
呢<代码>awk'/^[0-9]{4}([0-9]{2}){2}/{level=$2}level==“debug”
sed -r '/info/I{:a;n;/^[0-9]{4}(-[0-9]{2}){2}/!ba;s/^/\n/;D};d' file
sed '/info/I{:a;n;/^....-..-.. /!ba;s/^/\n/;D};d' file