用awk剪切字符串

时间:2013-01-07 23:39:10

标签: shell awk

我有一个像这样的字符串

key2|ex|am||ple

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

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

6 个答案:

答案 0 :(得分:5)

尝试使用 C样式进行循环

 echo 'key2|ex|am||ple' | awk -F'|' '{for (i=2; i<=NF; i++) printf("%s", $i)}'
 example

答案 1 :(得分:5)

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

我会用这种方式写awk解决方案

awk -F '|' -v OFS="" '{$1=""; print}'

答案 2 :(得分:2)

您只需设置输出字段分隔符并取消设置第一个字段:

$ echo 'key2|ex|am||ple' | awk -v FS="|" -v OFS="" '{ $1 = "" ; print }'
example

答案 3 :(得分:1)

使用sedtr

echo "key2|ex|am||ple" | sed 's/[^|]*|//' | tr -d '|'

答案 4 :(得分:0)

perl -pe 's/^[^\|]*\|//g;' your_file

@Ed评论后更新

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

答案 5 :(得分: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中的等价物(所有awks都支持ERE):

$ echo 'key2|ex|am||ple' | awk '{gsub(/^[^|]*[|]|[|]/,"")}1'
example