删除行的前N个字符的unix命令是什么?


238

例如,我可能想要:

tail -f logfile | grep org.springframework | <command to remove first N characters>

我当时以为tr可能有这样做的能力,但不确定。

Answers:


355

使用cut。例如。去除每行的前4个字符(即从第5个字符开始):

tail -f logfile | grep org.springframework | cut -c 5-

1
您对管道为什么不起作用有任何想法吗?当我基本上运行该命令时,“ cut”不会将结果打印到stdout ...如果我只运行“ tail -f logfile | cut -c 5-'我可以看到结果...问题一定是grep我正在使用cygwin仅供参考
les2

如果不添加最后一个管道并剪切怎么办?基本上,如果您删除行的最后一部分?
2009年

当我将管道添加到“剪切”时,它“尾随”日志文件,用grep过滤(即,其中所有带有“ org.springframework”的行都打印到stdout)...但是如果我消除,它会挂起'grep''cut'正常工作...我在想我使用grep的方式有问题...可能也是cygwin的问题
les2

1
哦,我明白了...你为什么要用尾巴?只是做grep org.springframework日志文件| 切-c 5-但我认为sed更好:-)
LB40

6
问题在于,grep在将大块发送给剪切之前正在缓冲大块,因为它可以看到它没有写入终端。使用grep --line-buffered "org.springframework来解决这个问题。
SteenSchütt2014年

48
sed 's/^.\{5\}//' logfile 

然后将5替换为所需的数字...应该可以解决问题...

如果每行编辑 sed 's/^.\{5\}//g' logfile


29

您可以使用cut

cut -c N- file.txt > new_file.txt

-c: 人物

file.txt: 输入文件

new_file.txt: 输出文件

N-: 从N到结尾的字符将被剪切并输出到新文件。

还可具有其他参数,例如:'N','N-M','-M'分别表示第n个字符,第n至第m个字符,第一个至第m个字符。

这将对输入文件的每一行执行操作。


4
tail -f logfile | grep org.springframework | cut -c 900-

将删除前900个字符

cut 使用900-在行尾显示第900个字符

但是,当我通过grep用管道传输所有这些内容时,我什么也没得到


4
“ cut -c 1-900”将不会“删除前900个字符”,只会保留前900个字符。如果要删除前900个字符,请使用“ cut -c 901-”
iammichael

也是@iammichael的回答,每行前900个字符
Blair Conrad,2009年

1
'cut -c 900-”将删除前899个字符,不是吗?
Yiding Zhou

4

我认为awk这将是最好的工具,因为它可以过滤并在过滤后的行上执行必要的字符串操作功能:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}'

要么

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)'

1

这是简单的功能,已通过bash测试。函数的第一个参数是字符串,第二个参数是要剥离的字符数

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

用法: 在此处输入图片说明


2
您可以简化此操作以回显$ {1:$ 2}
kdubs 18-4-12的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.