将新行视为另一个字符的grep/sed替代方案
将新行视为另一个字符的grep/sed替代方案,sed,awk,grep,Sed,Awk,Grep,grep和sed都逐行处理输入,据我所知,让它们中的任何一个处理多行都不是很简单。我正在寻找的是这两个程序的替代方案,这两个程序将换行符视为另一个字符。是否有符合此类标准的工具您需要的工具是awk。它是面向记录的,而不是面向行的,您可以通过设置内置变量RS来指定记录分隔符。特别是,GNU awk允许您将RS设置为任何正则表达式,而不仅仅是单个字符。下面是一个示例,awk使用一个空行分隔每个记录。如果您向我们展示您拥有的数据,我们可以帮助您 cat file first line second l
grep
和sed
都逐行处理输入,据我所知,让它们中的任何一个处理多行都不是很简单。我正在寻找的是这两个程序的替代方案,这两个程序将换行符视为另一个字符。是否有符合此类标准的工具您需要的工具是awk
。它是面向记录的,而不是面向行的,您可以通过设置内置变量RS来指定记录分隔符。特别是,GNU awk允许您将RS设置为任何正则表达式,而不仅仅是单个字符。下面是一个示例,awk
使用一个空行分隔每个记录。如果您向我们展示您拥有的数据,我们可以帮助您
cat file
first line
second line
third line
fourth line
fifth line
sixth line
seventh line
eight line
more data
在此基础上运行awk
,并使用空行作为新记录重建数据
awk -v RS= '{$1=$1}1' file
first line second line third line
fourth line fifth line sixth line
seventh line eight line
more data
PSRS
不等于file,设置为RS=
空白,等于RS=”“
1)Sed可以一起处理块行,而不总是逐行处理
在sed中,我通常使用:loop;$!{N;b循环}
获取由换行符分隔的模式空间中的所有可用行
样本:
Productivity
Google Search\
Tips
"Web Based Time Tracking,
Web Based Todo list and
Reduce Key Stores etc"
结果(删除中间的内容)
您应该阅读此URL(Unix Sed教程:Sed分支操作的6个示例),它将为您提供详细的工作原理
2) 对于grep,检查您的grep是否支持-z选项,它不需要逐行处理输入
-z, --null-data
Treat the input as a set of lines, each terminated by a zero
byte (the ASCII NUL character) instead of a newline. Like the
-Z or --null option, this option can be used with commands like
sort -z to process arbitrary file names.
不要在awk参数列表(文件列表所在的位置)中设置变量,除非您有非常具体的原因(例如,您需要在文件之间更改FS)并了解其后果。在这种情况下,请尝试将脚本更改为使用getline作为
awk'BEGIN{getline<“file”;print”“}'RS=file
和awk-v RS='BEGIN{getline<'文件“print”“}”文件
并注意差异。未在开始部分填充的变量只是一个结果,它还使处理多个文件变得复杂。若要设置awk变量,请使用-v var='value'
,除非您有充分的理由不这样做。
-z, --null-data
Treat the input as a set of lines, each terminated by a zero
byte (the ASCII NUL character) instead of a newline. Like the
-Z or --null option, this option can be used with commands like
sort -z to process arbitrary file names.