Shell 用awk剪线

Shell 用awk剪线,shell,awk,Shell,Awk,我有一根这样的绳子 key2|ex|am||ple 我想得到示例。我想在第一根管子之后得到零件,而不需要其他管子 目前我使用的是awk-F“|”{print$2,$3,$4,$5},但这不是一个好的解决方案。尝试使用C风格的For循环来实现这一点 echo'key2 | ex | am | ple | awk-F |{for(i=2;i使用sed和tr: echo "key2|ex|am||ple" | sed 's/[^|]*|//' | tr -d '|' 在@Ed的评论之后更新 per

我有一根这样的绳子

key2|ex|am||ple
我想得到
示例
。我想在第一根管子之后得到零件,而不需要其他管子

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

尝试使用C风格的For循环来实现这一点


echo'key2 | ex | am | ple | awk-F |{for(i=2;i使用
sed
tr

echo "key2|ex|am||ple" | sed 's/[^|]*|//' | tr -d '|'
在@Ed的评论之后更新

perl -F"|" -ane 'shift @F;print "@F"' your_File

这是一个简单的单行替换,因此是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 -v FS="|" -v OFS="" '{ $1 = "" ; print }'
example

为什么这不是一个好的解决方案?这不是一个好的解决方案,因为字符串可以包含更多的管道。只是一个例子。啊,好的。这就是Stackoverflow质量问题包括的信息类型-输入数据的描述和所需的输出。以及(如您所包括的)一两个示例。printf是一个内置的,而不是一个函数,因此()您没有执行看起来他们正在执行的操作。此外,您需要添加一个
;打印“”
获取换行符。@EdMorton,括号没什么问题:它只是不必要的和误导性的,我想几乎所有使用它们的人都不知道这一点,所以值得指出。该命令只会删除第一个|,不会删除其余的|。
perl -F"|" -ane 'shift @F;print "@F"' your_File
$ echo 'key2|ex|am||ple' | sed -e 's/[^|]*|//' -e 's/|//g'
example
$ echo 'key2|ex|am||ple' | sed -r 's/^[^|]*[|]|[|]//g'
example
$ echo 'key2|ex|am||ple' | awk '{gsub(/^[^|]*[|]|[|]/,"")}1'
example
$ echo 'key2|ex|am||ple' | awk -v FS="|" -v OFS="" '{ $1 = "" ; print }'
example