Cob*_*ast 21 linux grep newline
我grep用来生成将由另一个程序解析的输出.
但是,该程序只希望输出为数字或零字节.
现在在grep输出后输出换行符.我已经检查了-Z选项,但它似乎不起作用,因为我使用grep进行count(-c).
我正在执行sh,而不是bash.因此嵌套它echo -n "$(grep -c pattern)"也不起作用.
如何摆脱拖尾换行?
Joh*_*web 31
使用tr -d字符串中删除字符:
$ grep -c ' ' /etc/passwd | tr -d '\n'
69$ grep -c ' ' /etc/passwd | tr -d '\n' | xxd
0000000: 3639 69
$
Run Code Online (Sandbox Code Playgroud)
Ama*_*9MF 20
你可以管它并将其tr翻译\n成一个\0角色:
tr '\n' '\0'
Run Code Online (Sandbox Code Playgroud)
use*_*dly 10
我知道这是旧的,并且tr也可以正常工作,但我遇到了这个问题并注意到OP说: 我正在执行sh,而不是bash.因此将它嵌套到echo -n"$(grep -c pattern)"中也不起作用.
这不是grep或sh,而是如何使用echo.对于未来的访问者来说,这不起作用的唯一原因是由于替换命令周围的双引号.实际上,即使使用sh,以下也可以.
echo -n $(grep -c pattern)
Run Code Online (Sandbox Code Playgroud)
例子:
$ 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
Run Code Online (Sandbox Code Playgroud)