管道中的命令行bash变量

时间:2017-10-09 16:59:28

标签: bash command-line pipe

是否有办法在bash函数中使用STDIN?

e.g。

# echo "somevar = (100)" >> test.txt
# grep -Eo "\([[:digit:]]+\)$" test.txt
(100)

所以,我的号码很好,接下来我想删除括号。 我做的是:

string=`grep -Eo "\([[:digit:]]+\)$" test.txt`; echo ${string:1:-1}
100

所以我的问题解决了,但我花了很长时间做的是:

grep -Eo "\([[:digit:]]+\)$" test.txt | echo ${$1:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | ${$1:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | xargs echo ${:1:-1}
grep -Eo "\([[:digit:]]+\)$" test.txt | xargs -I 's' echo ${s:1:-1}

等等......都不起作用。

假设有可能,我如何在bash命令中使用管道输入值?

2 个答案:

答案 0 :(得分:1)

假设您想要使用管道中的某些输入并且要分别处理每行输入,您可以尝试:

echo "somevar = (100)" | grep -Eo "\([[:digit:]]+\)$" | while read in
do
  echo $in
done

while循环将使用read命令在变量IN中一次读取一行。在循环内你可以做任何你需要的治疗。在这种情况下,我使用echo来表明您获得了输入值。

答案 1 :(得分:0)

您使用的语法是变量。在变量中保存grep的输出是使用它的自然方式。

如果你想使用管道,你需要使用修改stdin的东西,而不是变量。考虑sed

grep -Eo "\([[:digit:]]+\)$" test.txt | sed 's/^(\|)$//g'