How to prevent grep from printing a trailing newline?

拈花ヽ惹草 提交于 2020-08-21 04:21:09

问题


I am using grep to produce output that will be parsed by another program.

However, that program expects output only to be numeric or zero-bytes.

Now grep outputs a newline character after its output. I've checked the -Z option but it doesn't seem to work as I'm using grep for counting (-c).

I am executing in sh, not bash. So nesting it into echo -n "$(grep -c pattern)" doesn't work either.

How can I get rid off the trailing newline?


回答1:


You can pipe it through tr and translate the \n to a \0 character:

tr '\n' '\0'



回答2:


Use tr -d to delete characters in a string:

$ grep -c ' ' /etc/passwd | tr -d '\n'
69$ grep -c ' ' /etc/passwd | tr -d '\n' | xxd 
0000000: 3639                                     69
$ 



回答3:


I know this is old, and tr works just as well, but I happened across this question and noticed OP stated: I am executing in sh, not bash. So nesting it into echo -n "$(grep -c pattern)" doesn't work either.

This isn't grep or sh so much as how echo is being used. For future visitors, the only reason this didn't work is due to the double quotes around the substituted command. The following does, in fact, work even using sh.

echo -n $(grep -c pattern)

Examples:

$ ls /dev/sd? #example of formatted output
/dev/sda  /dev/sdc  /dev/sde  /dev/sdg  /dev/sdi  /dev/sdk
/dev/sdb  /dev/sdd  /dev/sdf  /dev/sdh  /dev/sdj

$ echo $(ls /dev/sd?) #without -n, appends \n only at the end
/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk

$ echo -n $(ls /dev/sd?) #with -n, does not append the \n, but still strips the line breaks from the string
/dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk

$ echo -n "$(ls /dev/sd?)" #output when double quotes are used
/dev/sda
/dev/sdb
/dev/sdc
/dev/sdd
/dev/sde
/dev/sdf
/dev/sdg
/dev/sdh
/dev/sdi
/dev/sdj
/dev/sdk


来源:https://stackoverflow.com/questions/7249755/how-to-prevent-grep-from-printing-a-trailing-newline

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!