如何使用bash管道保留除第一个令牌之外的所有内容?
假设我有这个:如何使用bash管道保留除第一个令牌之外的所有内容?,bash,shell,Bash,Shell,假设我有这个: echo " word1 word2 word3" | awk '{print $1;}' # Prints "word1" 我想在第二个标记开始之前删除所有内容,因此我想保留word2 word3。我可以做的只是删除第一个标记,然后修剪其余部分,但除了第一个标记,我不知道如何保留所有内容。awk的for:echo“word1 word2 word3”| awk'{for(I=2;I) 将只在rest上存储word2 word3。请参阅bash手册页中的read命令。回显
echo " word1 word2 word3" | awk '{print $1;}' # Prints "word1"
我想在第二个标记开始之前删除所有内容,因此我想保留word2 word3
。我可以做的只是删除第一个标记,然后修剪其余部分,但除了第一个标记,我不知道如何保留所有内容。awk的for:echo“word1 word2 word3”| awk'{for(I=2;I)
将只在rest上存储word2 word3。请参阅bash手册页中的read命令。回显“word1 word2 word3”| rev | awk'NF--| rev
)第一个标记后的模式总是已知的吗?例如,在您的情况下,word2
?为什么需要使用管道?使用linux工具操作字符串的方法有很多种,不一定是pipe@Cyrus不太有效,我得到了所有3个标记,但似乎对我不起作用:echo“word1 word2 word3”| read skip rest | cat
将其导入cat
是没有意义的。正如我所说,这两个词存储在rest
中。只需执行echo$rest
。管道退出后,存储在命令中的变量将不可用。doread skip rest@user1934428:不确定你的意思他说的是什么问题请注意,您不能执行echo“word1 word2 word3”|读取skip rest
,然后echo
输出变量。它们不会被删除available@AlexanderMills:但是跳过的令牌被存储了!它在skip
中。您确实按照我的建议阅读了bash手册页,不是吗?然后您知道该命令是如何工作的。我也在考虑这个问题,但这会破坏OP希望在第一个令牌之后保留所有内容,我理解这包括令牌之间的空格数。如果需要保留空格,可能有更简单的方法,可以使用sed的/^[\t]*//“
修剪前导空格和cut-d'-f2-
在第一个空格后保留所有内容,例如:echo”word1 word2 word3“| sed's/^[\t]*/'| cut-d'-f2-| sed's/^[\t]*/'
或者如果需要修剪前导空格:echo”word1 word2 word3 w4 w5“| sed's/\t]*//|cut-d'-f2-|sed's/^[\t]*/'
echo " word1 word2 word3" | read skip rest