我在Linux中只有一个文件,其数据类似
Line1A
Line2
Line1
Line3
Line4
我想获得Line1和Line4之间的线,即Line3。 我在shell中使用了以下linux命令。
Sed -n -e "/Line1/,/Line4/p" myFile.txt
这给了我以下输出
Line2
Line1
Line3
上面的输出是因为sed搜索的行包含,而不是精确的行匹配。 有没有办法在提取行匹配之间获取字符串?
答案 0 :(得分:1)
在sed中,^
代表行开始,$
代表行结束。
sed -n "/^Line1$/,/^Line4$/p"
您的sed很奇怪,此sed命令应输出模式之间的行,包括模式本身。无论如何,不久后在tutorialspoint进行了测试。
答案 1 :(得分:0)
如果我对您的了解很好,那么您正在寻找的是类似sed -n -e '/^Line\(1\|4\)$/p'
的东西。
您可以使用'^'表示您希望搜索模式与行首匹配,并希望'$'与行尾匹配。
答案 2 :(得分:0)
尝试awk。
当您使用/../、/../指定范围时,匹配项还将包括边界。 但是对于您而言,则不需要它,因此您无需进行任何操作。
$ cat navnath.txt
Line1A
Line2
Line1
Line3
Line4
$ awk -v p=0 ' /^Line1$/,/^Line4/ { p=1;if(/Line1/ || /Line4/) p=0}p ' navnath.txt
Line3
$
答案 3 :(得分:0)
如果只想在之间,则不包括开头和结尾,一种简单的方法是(GNU sed):
sed -n '/^Line1$/,/^Line4$/{/^Line1$/d;/^Line4$/d;p}'
演示:
$ cat file
Line1A
Line2
Line1
Line3
Line4
$ sed -n '/^Line1$/,/^Line4$/{/^Line1$/d;/^Line4$/d;p}' file
Line3
BSD sed:
sed -n -e '/^Line1$/,/^Line4$/{' -e '/^Line1$/d;/^Line4$/d;p' -e '}'
awk
版本:
awk '/^Line1$/{s=1;next}/^Line4$/{s=0}s'