Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 用sed省略最后一行_Bash_Sed_Awk - Fatal编程技术网

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