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

sedおよびを使用するtr

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

これは 1 行の単純な置換であるため、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 に答える