2

我有一个这样的字符串

key2|ex|am||ple

我想得到example. 我想在第一个管道之后得到零件,而没有其他管道。

目前我正在使用awk -F"|" '{print $2,$3,$4,$5}',但这不是一个好的解决方案。

4

6 回答 6

7
cut -d '|' -f 2- <<< "$string" | tr -d '|'

我会这样写awk解决方案

awk -F '|' -v OFS="" '{$1=""; print}'
于 2013-01-08T05:48:58.613 回答
6

尝试使用C 风格的 for 循环执行此操作

 echo 'key2|ex|am||ple' | awk -F'|' '{for (i=2; i<=NF; i++) printf("%s", $i)}'
 example
于 2013-01-07T23:41:01.673 回答
2

您可以简单地设置输出字段分隔符并取消设置第一个字段:

$ echo 'key2|ex|am||ple' | awk -v FS="|" -v OFS="" '{ $1 = "" ; print }'
example
于 2013-01-08T14:28:41.353 回答
1

使用sedtr

echo "key2|ex|am||ple" | sed 's/[^|]*|//' | tr -d '|'
于 2013-01-07T23:48:12.167 回答
0
perl -pe 's/^[^\|]*\|//g;' your_file

在@Ed 发表评论后更新

perl -F"|" -ane 'shift @F;print "@F"' your_File
于 2013-01-08T10:34:21.230 回答
0

这是单行的简单替换,因此是 sed 的一个很好的应用程序:

$ echo 'key2|ex|am||ple' | sed -e 's/[^|]*|//' -e 's/|//g'
example

或者如果您的 sed 支持 ERE:

$ echo 'key2|ex|am||ple' | sed -r 's/^[^|]*[|]|[|]//g'
example

或 awk 中的等价物(所有 awk 都支持 ERE):

$ echo 'key2|ex|am||ple' | awk '{gsub(/^[^|]*[|]|[|]/,"")}1'
example
于 2013-01-08T14:19:16.693 回答