Linux 用问号划线,并在前面划线-sed
我有一些文本被传送到sed(任何其他工具都可以)。我想提取以问号结尾的那一行和前面的那一行。我们如何才能做到这一点 eg文本Linux 用问号划线,并在前面划线-sed,linux,bash,shell,awk,sed,Linux,Bash,Shell,Awk,Sed,我有一些文本被传送到sed(任何其他工具都可以)。我想提取以问号结尾的那一行和前面的那一行。我们如何才能做到这一点 eg文本 & 434.0K - .... What are you trying to filter out of screencap's output? Student xcvdgfdg srrtgg 请您尝试以下内容,并让我知道这是否有助于您 awk '/\?$/{print prev ORS $0} {prev=$0}' Input_file 对于显示的输入
& 434.0K
-
....
What are you trying to filter
out of screencap's output?
Student
xcvdgfdg
srrtgg
请您尝试以下内容,并让我知道这是否有助于您
awk '/\?$/{print prev ORS $0} {prev=$0}' Input_file
对于显示的输入,以下是输出
What are you trying to filter
out of screencap's output?
在Solaris/SunOS系统上,将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
代码说明:
/\?$/
:搜索以?
结尾的行,如果是,则执行以下操作
{print prev ORS$0}
:在这里使用awk
的print函数,通过该函数,我们在这里打印名为prev
的变量和$0
(当前行)的值
{prev=$0}
:因此,我将当前行的值存储到名为prev的变量中,以便在最后一行匹配?
时,可以打印前一行。请尝试以下操作,并让我知道这是否对您有帮助
awk '/\?$/{print prev ORS $0} {prev=$0}' Input_file
对于显示的输入,以下是输出
What are you trying to filter
out of screencap's output?
在Solaris/SunOS系统上,将awk
更改为/usr/xpg4/bin/awk
,/usr/xpg6/bin/awk
,或nawk
代码说明:
/\?$/
:搜索以?
结尾的行,如果是,则执行以下操作
{print prev ORS$0}
:在这里使用awk
的print函数,通过该函数,我们在这里打印名为prev
的变量和$0
(当前行)的值
{prev=$0}
:因此,这里我将当前行的值存储到名为prev的变量中,以便在最后一行匹配?
时,可以打印前一行。sed解决方案:
sed -n '/?$/{x;G;p;};h'
粗略翻译:一般来说,不要打印任何东西。如果此行以“$”结尾,请在保留空间中以该行开头并打印。并将此行保存在保留空间中。sed解决方案:
sed -n '/?$/{x;G;p;};h'
粗略翻译:一般来说,不要打印任何东西。如果此行以“$”结尾,请在保留空间中以该行开头并打印。并将该行保存在保留空间。您可以使用
grep
匹配相关行,然后对匹配后的行使用-A num
,或对匹配前的行使用-B num
鉴于:
$ echo "$txt"
& 434.0K
-
....
What are you trying to filter
out of screencap's output?
Student
xcvdgfdg
srrtgg
前一行:
$ echo "$txt" | grep -B1 '\?$'
What are you trying to filter
out of screencap's output?
一行之后:
$ echo "$txt" | grep -A1 '\?$'
out of screencap's output?
Student
等等
支持POSIX和GNUGREP
如果有多个匹配项,
grep
将在每个匹配项之间放置--
:
$ echo "$txt$txt" | grep -A1 '\?$'
out of screencap's output?
Student
--
out of screencap's output?
Student
如果这是一个问题,请通过管道sed
将其删除:
$ echo "$txt$txt" | grep -A1 '\?$' | sed '/^--*$/d'
out of screencap's output?
Student
out of screencap's output?
Student
您可以使用
grep
匹配有问题的行,然后对匹配后的行使用-A num
,或对匹配前的行使用-B num
鉴于:
$ echo "$txt"
& 434.0K
-
....
What are you trying to filter
out of screencap's output?
Student
xcvdgfdg
srrtgg
前一行:
$ echo "$txt" | grep -B1 '\?$'
What are you trying to filter
out of screencap's output?
一行之后:
$ echo "$txt" | grep -A1 '\?$'
out of screencap's output?
Student
等等
支持POSIX和GNUGREP
如果有多个匹配项,
grep
将在每个匹配项之间放置--
:
$ echo "$txt$txt" | grep -A1 '\?$'
out of screencap's output?
Student
--
out of screencap's output?
Student
如果这是一个问题,请通过管道sed
将其删除:
$ echo "$txt$txt" | grep -A1 '\?$' | sed '/^--*$/d'
out of screencap's output?
Student
out of screencap's output?
Student
另一个sed解决方案
sed '$d;N;/?$/!D' infile
另一个sed解决方案
sed '$d;N;/?$/!D' infile
grep-B1'\?$”
Sean的那本书就是一个完美的答案@SeanBright您想发布答案吗?输出不理想。它在上下文的匹配项之间吐出一个--
。堆栈溢出不是代码编写服务。请出示你的密码。由于堆栈溢出对您隐藏了关闭原因:寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:.grep-B1'\?$”
Sean的这篇文章就是一个完美的答案@SeanBright您想发布答案吗?输出不理想。它在上下文的匹配项之间吐出一个--
。堆栈溢出不是代码编写服务。请出示你的密码。由于堆栈溢出对您隐藏了关闭原因:寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。当我试图在管道上使用此选项时,我正在运行此xargs-i{}-0awk'/\?$/{print prev ORS$0}{prev=$0}{
但它抛出awk:fatal:无法打开文件
&434.0K`@nithin,为什么要将此选项与xargs
一起使用?请详细解释一下?我没有文件中的输出,我是从tesseract管道传输的。整个命令:tesseract sc.png stdout | sed'/^$/d'| xargs-I{}-0awk'/\?$/{print prev ORS$0}{}{prev=$0}
@nithin,不明白这里的xargs
有什么用?试着用singleawk
no aftersed
然后告诉我?当我试图在管道上使用它时,我正在运行这个xargs-i{}-0awk'/\?$/{print prev ORS$0}{prev=$0}{/code>但它抛出awk:fatal:无法打开文件
&434.0K nithin,为什么要用这个xargs
?请详细解释一下?我没有文件中的输出,我是从tesseract管道传输的。整个命令:tesseract sc.png stdout | sed'/^$/d'| xargs-I{}-0awk'/\?$/{print prev ORS$0}{}{prev=$0}
@nithin,不明白这里的xargs
有什么用?在sed
之后尝试使用singleawk
no,然后告诉我?虽然我的sed-n'H有点不同,但你还是击败了我$/{x;p};x'
。但它们实际上是一样的,这就是为什么我不发布答案。你比我抢先一步,尽管我的答案有点不同$/{x;p};x'。但它们实际上是一样的