sed は、次の場合に前の行の最初の単語を次の行の先頭に追加します。

sed は、次の場合に前の行の最初の単語を次の行の先頭に追加します。

問題がありますが、次の問題に対する解決策が見つかりませんでした。

特殊文字で始まる場合は、行の最初の単語を次のn行の先頭にコピーし、そうでない場合は新しい単語をコピーしたいと思います。

入力する:

aaa random words

`dsf

|df

bbb

|d

出力:

aaa random words

aaa`dsf

aaa|df

bbb

bbb|d

答え1

awk oneliner:

awk '/^[[:alnum:]]/ {prefix = $1; print; next} {print prefix $0}' input
  • 英数字で始まる行の最初の単語をに保存し、そのprefix行を印刷してから次の行に進みます。
  • 他のすべての行では、prefixこの行の前に印刷してください。

答え2

awk -f 1stword.awk < input

これには1stword.awk次のスクリプトが含まれています。

$0 ~ /^[[:alnum:]]/ { word=$1 ; print }   # save 1st word
$0 ~ /^[^[:alnum:]]/ { print word$0 }     # prepend saved word

[:alnum:]文字範囲内のすべての英数字を表します。 「特殊文字」定義に従ってさまざまな文字範囲を調整します。

関連情報