
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