Linux 如何使用grep、awk等在1中显示2行
当我启动bash命令时,我得到Linux 如何使用grep、awk等在1中显示2行,linux,bash,shell,grep,Linux,Bash,Shell,Grep,当我启动bash命令时,我得到 --> '044' 0 '' 0 1> '' 0 0 这是一个寄存器,我得到更多寄存器,如何在一行中显示每个寄存器?如果可能的话,如何用1个空格分隔值来显示 我想要这个: '044' 0 '' 0 '' 0 0 好吧,我把所有的命令都放进去了,不要用这个: cdmao;(ec
--> '044' 0 '' 0
1> '' 0 0
这是一个寄存器,我得到更多寄存器,如何在一行中显示每个寄存器?如果可能的话,如何用1个空格分隔值来显示
我想要这个:
'044' 0 '' 0 '' 0 0
好吧,我把所有的命令都放进去了,不要用这个:
cdmao;(echo "SELECT nulog FROM POSTE WHERE numan='5512204';"|cuser|grep "\--"|grep -v nulog|cut - c5-11;)|while read poste_id;do echo "SELECT key_id,genrtou,chiftp, sonsurson, mnemo, order_mla, key_mla FROM KEYBOARD WHERE poste_id='$poste_id';"|cuser| tr -s ' ' |
while read line; do
if [[ $i == 1 ]]; then
echo -n "$line";
let i+=1;
else
echo " $line";
let i-=1;
fi;
done
我什么也没有收到:只有这个>,not finish命令这应该删除输出中的所有额外空格和换行符:
your_command_here | tr '\n' ' ' | sed "s/[ ]*/ /g"
如果命令的部分输出除了stdout之外还写入了stderr,请执行以下操作:
your_command_here 2>&1 | tr '\n' ' ' | sed "s/[ ]*/ /g"
我假设前几个字符也是输出的一部分,但解决方案并不依赖于它 要删除额外的空格,可以使用
tr-s
,这将删除重复传递的字符。将未更改的输出与tr ed输出进行比较(两种情况下的第三行和第四行):
所以唯一剩下的就是删除那条新行。您也可以使用tr
(-d
表示删除),但是您还可以删除将字符串与下一个寄存器分隔的换行符
我不知道这些寄存器转储有多稳定,所以这里有一个不涉及正则表达式的解决方案-它只打印每第二行包含换行符的行:
i=1
echo "--> '044' 0 '' 0
1> '' 0 0" | tr -s ' ' |
while read line; do
if [[ $i == 1 ]]; then
echo -n "$line";
let i+=1;
else
echo " $line";
let i-=1;
fi;
done
--> '044' 0 '' 0 1> '' 0 0
要使用它,只需用寄存器转储程序替换echo“long register dump”
字符串
编辑:好的,如果这是您的整个命令链,那么您必须对它们进行分组,否则它们的部分输出将不会被过滤器捕获。但我猜cdmao
只是为了一些初始化(如果不是,请在另一个子shell或花括号中添加所有内容)
主要问题是您没有完成while循环(某个地方缺少一个done
)。不确定是否正确放置,但请尝试以下操作:
cdmao;
(echo "SELECT nulog FROM POSTE WHERE numan='5512204';"|cuser|grep "\--"|grep -v nulog|cut - c5-11;) |
while read poste_id; do
echo "SELECT key_id,genrtou,chiftp, sonsurson, mnemo, order_mla, key_mla FROM KEYBOARD WHERE poste_id='$poste_id';";
done |cuser| tr -s ' ' |
while read line; do
if [[ $i == 1 ]]; then
echo -n "$line";
let i+=1;
else
echo " $line";
let i-=1;
fi;
done
它可以用一种更漂亮的方式完成,但我不知道其中涉及的一些命令,所以我将它与您的版本保持一致。无论如何,使用一些格式和语法错误将更容易发现。使用这些我得到了以下结果:->'0 4 4'0''0 1>''0 0 0不起作用,在1 linea中显示相同的内容,但所有1 linea,请参见lynx的答案,1寄存器2行,但我收到50多个寄存器,u全部删除\n,1行中的所有寄存器与
tr'\n'.\sed“s/[]*//g”
功能相同,只需通过xargs echo
即可实现。我拉所有命令,因为我不知道如何将您的命令与我的命令放在一起
your command | cut -d '>' -f 2- | paste - - | awk '{$1=$1;print}'
your command | cut -d '>' -f 2- | paste - - | awk '{$1=$1;print}'