管道grep切

时间:2017-11-07 03:17:54

标签: linux bash shell

这一行:

echo $(grep Uid /proc/1/status) | cut -d ' ' -f 2

产生输出:

0

这一行:

grep Uid /proc/1/status | cut -d ' ' -f 2

产生输出:

Uid:    0   0   0   0

我的目标是第一个输出。我的问题是,为什么第二个命令不能产生我预期的输出。为什么我需要回应它?

4 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是更改​​bash shell中的输出字段分隔符或OFS变量

IFSOLD="$IFS" # IFS for Internal field separator
IFS=$'\t'
grep 'Uid' /proc/1/status | cut -f 2
0 # Your result
IFS="$IFSOLD"

或简单方法

grep 'Uid' /proc/1/status | cut -d $'\t' -f 2

注意:顺便提一句tab是剪切的默认分隔符[ here ]

答案 1 :(得分:1)

使用awk

awk '/Uid/ { print $2; }' /proc/1/status

答案 2 :(得分:0)

你几乎不需要写clearSelection() { this.valueChangeValue = ''; this.exampleData = []; // For Multiple true // this.currentValue = []; } 之类的东西 - 它的几乎等同于直接调用echo $(...)。请尝试使用...(您应该经常使用),并且您会看到它的行为类似于echo "$(...)"

原因是因为在没有引号的情况下调用...命令替换时,结果字符串在传递给$()之前被Bash拆分为单独的参数,并且echo输出每个参数分开通过单个空格,无论命令替换产生的空格(在您的情况下选项卡)。

正如sjsam建议的那样,如果你想要echo制表符分隔的输出,只需将制表符指定为分隔符而不是空格:

cut

答案 3 :(得分:0)

grep Uid / proc / 1 / status | sed -r“s / \ s + / / g”| awk'{print $ 3}'

输出 0