我希望通过逐行切割传递线条(非常像egrep --line-buffered
)。我怎样才能做到这一点?我们欢迎{awk
,sed
,perl
解决方案,请保持简短。 :)]
答案 0 :(得分:2)
如果你只想在UNIX中模拟循环中的cut功能(可能很慢),你可以使用awk的 substr 函数。
例如,假设您有一个文本文件(lines.txt),其排列方式如下:line1: the first line
line2: the second line
line3: the third line
line4: the fourth line
line5: the fifth line
使用此单行,其中 8 是您要从以下各行开始打印的字符的索引:
awk '{ print substr($0,8) }' lines.txt
结果如下:
the first line
the second line
the third line
the fourth line
the fifth line
如果要删除特定单词或正则表达式,可以将其作为字段分隔符输入到awk中,然后打印要删除的部分后面的行部分:
例如,这个单行:
awk 'BEGIN { FS=": " } { print $2 }' lines.txt
还会打印出来:
the first line
the second line
the third line
the fourth line
the fifth line
因为你可以利用这样一个事实:每行包含一个分号后跟一个空格(“:”)来将该行分成两部分。然后你只需告诉awk打印每行(打印$ 2)的第二部分(即字段)。
答案 1 :(得分:1)
您可以使用stdbuf
实用程序来控制使用stdio的任何命令的stdio缓冲
... | stdbuf -oL cut ... | ...