web-dev-qa-db-ja.com

sedまたはawkまたはPerlまたはbashを使用して文字列を2つの部分に分割する

私はこのような文字列を持っています:

Grades ABCDEF-123456

この文字列をこのように2つのセクションに分割したい

Grades ABCDEF
Grades 123456

どうすればbashでそれを行うことができますか?

1
Sincerity

シェルでもこれを完全に行うことができます:

text="Grades ABCDEF-123456"

先行テキストを分割します。必要に応じてキャプチャできますが、ここでは破棄します。

grades="${text#* }"

これで、2つの部分を変数として抽出できますが、ここではそれらを出力します。

echo "Grades ${grades%-*}"
echo "Grades ${grades#*-}"

これらを1つの出力ステートメントにまとめてクラッシュすることもできますが、(printfechoよりも安全である場合でも)読みやすいとは思いません。

printf "Grades %s\nGrades %s\n" "${grades%-*}" "${grades#*-}"
3
roaima
echo Grades "ABCDE-12345" | sed 's/-/ /g' | awk '{ print $1" "$2"\n"$1" "$3'}
Grades ABCDE
Grades 12345

または@steeldriverごと

awk -F'[ -]' '{print $1, $2; print $1, $3}'
2
user88036

これを行うには、ダッシュを改行で置き換え、その後に最初のフィールドを続けます。

Perl -alpe 's/-/\n$F[0] /' 
1
Rakesh Sharma