私はそのような文字列を持っています
key2|ex|am||ple
私は取得したいと思いますexample
。最初のパイプの後に、他のパイプなしでパーツを取得したい。
今のところ私は使用してawk -F"|" '{print $2,$3,$4,$5}'
いますが、それは良い解決策ではありません。
cut -d '|' -f 2- <<< "$string" | tr -d '|'
私はこのようにawkソリューションを書きます
awk -F '|' -v OFS="" '{$1=""; print}'
Cスタイルのforループでこれをやってみてください
echo 'key2|ex|am||ple' | awk -F'|' '{for (i=2; i<=NF; i++) printf("%s", $i)}'
example
出力フィールドセパレーターを設定し、最初のフィールドの設定を解除するだけです。
$ echo 'key2|ex|am||ple' | awk -v FS="|" -v OFS="" '{ $1 = "" ; print }'
example
sed
およびを使用するtr
:
echo "key2|ex|am||ple" | sed 's/[^|]*|//' | tr -d '|'
perl -pe 's/^[^\|]*\|//g;' your_file
@Ed からのコメントの後の更新
perl -F"|" -ane 'shift @F;print "@F"' your_File
これは 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