アッ

アッ

bashコマンドを使用して行内の文字列と数字を区切る方法。

例: 以下を含む例があります。

string123anotherstr456thenanotherstr789

出力は次のようになります。

string
123
anotherstr
456
thenanotherstr
789

答え1

牛に似た一種の栄養grepまたは互換性のあるソリューション:

s="string123anotherstr456thenanotherstr789"
grep -Eo '[[:alpha:]]+|[0-9]+' <<<"$s"
  • [[:alpha:]]+|[0-9]+- アルファベット文字または数字と一致する交互の正規表現グループは、出力で別々の項目として扱われます。

出力:

string
123
anotherstr
456
thenanotherstr
789

答え2

アッ

入力には文字と数字のみが含まれます。

[[:alpha:]]+それぞれ(文字シーケンス)とそれぞれ[[:digit:]]+(数字シーケンス)の後に改行文字を追加します。

awk '{ gsub(/([[:alpha:]]+|[[:digit:]]+)/,"&\n",$0) ; printf $0 }' filename

(一致シーケンス&の略語ですawk。)


入力には他の文字(句読点など)が含まれています。

以前と同じですが、[^[:alnum:]]+(非英数字、非数字)文字の部分文字列も処理します。

awk '{ gsub(/([[:alpha:]]+|[[:digit:]]+|[^[:alnum:]]+)/,"&\n",$0) ; printf $0 }' filename

負数と小数

-(ハイフン)と.(ピリオド)を数字として扱います。

awk '{ gsub(/([[:alpha:]]+|[[:digit:].-]+|[^[:alnum:].-]+)/,"&\n",$0) ; printf $0 }' filename

[[:digit:].-]+これらの文字は式に表示する必要があります[^[:alnum:].-]+。また、文字通りのハイフンとして解釈されるには、次のようにする必要が-あります。最後各式の最後の閉じ括弧の前の文字は、そうでない場合を意味します。範囲性格。

例:

[test]$ cat file.txt 
string123another!!str456.001thenanotherstr-789

[test]$ awk '{ gsub(/([[:alpha:]]+|[[:digit:].-]+|[^[:alnum:].-]+)/,"&\n",$0) ; printf $0 }' file.txt 
string
123
another
!!
str
456.001
thenanotherstr
-789

読者のための練習

入力ファイルに必要な場合は、awk次のようにコマンドを変更できます。

  • -にある場合のみ確認してください。スタート一連の数字。
  • 科学的表記法の数字が許可されます。

答え3

POSIX的に:

string=string123anotherstr456thenanotherstr789
sed '
  s/[^[:alnum:]]//g; # remove anything other than letters and numbers
  s/[[:alpha:]]\{1,\}/&\
/g; # insert a newline after each sequence of letters
  s/[0-9]\{1,\}/&\
/g; # same for digits
  s/\n$//; # remove a trailing newline if any' << EOF
$string
EOF

答え4

python3

python3 -c '
from itertools import groupby
s = ("".join(g) for k, g in 
    groupby("string123anotherstr456thenanotherstr789", lambda x: x.isalpha()))
print(*s, sep="\n")
'

string
123
anotherstr
456
thenanotherstr
789

関連情報