私のアプローチでは、文字を文字列に分割する必要があると主張しています。作業方法を見つけましたが、理解できません。

私のアプローチでは、文字を文字列に分割する必要があると主張しています。作業方法を見つけましたが、理解できません。

文字列を1行に複数の文字に分割する方法を見つけようとしています。
今すぐahebhaaa

a  
h  
e  
b  
h  
a  
a  
a  

私は試した:

$ echo ahebhaaa | sed 's/\(.\)\(.\)/\1\n\2/g'
つまり、私の意図はキャプチャグループを使用して文字間に新しい行を「挿入」することですが、次のような結果が得られます。

a  
he  
bh  
aa  
a   

私はこれが貪欲な/非欲望的なものと関係があると思いますが、そこに?*を追加することは何もしません。私がここで何を間違っているのか?

また私はこれを見つけました:
echo ahebhaaa | sed 's/[^\n]/&\n/g'
仕事をします。しかし、私はそれがどのように機能するのか理解していません。何ですか&?働く方法[^\n]

ベストアンサー1

キャプチャグループ

最初の例は似ていますが、sed一度に2文字を使用して\(.\)\(.\)キャプチャグループを使用して実行するには、次のように調整できます。

$ echo ahebhaaa | sed 's/\(.\)/\1\n/g'
a
h
e
b
h
a
a
a

使用&

sedこの例が機能する理由は次のとおりです&&検索と変更は正規表現に一致する文字です。だからすべていいえ\nA.

はい

$ echo "123 abc" | sed 's/[0-9]*/&&/'
123123 abc

最初は&パターン()に一致する文字を印刷します。 2番目に印刷します。[0-9]*123&

$ echo "123 abc" | sed 's/ab/&&&/'
123 abababc

私たちが探しているパターンはですab。私たちが歩いている間、文字列123 abcsedは一致しない文字を印刷しています123。その後、ab検索して置き換える内容に一致する文字列に会います。その後、sedそれを一致するコンテンツの3つのコピー()に置き換えますabbab。最後にsed印刷してくださいc

このシンボルは[^\n]次のセットを生成します。いいえ行末文字。その場合は、sedテキスト文字列に沿って移動しながらahebhaaa各文字をテストし、「これは1つではありません\n」と言うことを想像してみてください。行末文字でない場合は、sedこの文字に対して検索と置換が行われ、一致&(つまりその文字)が改行文字で印刷されます。その後、ahebhaaaロープに沿って歩きながらこれを繰り返します。

引用する

おすすめ記事