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:]字符范围中的 表示所有字母数字字符。根据您对“特殊字符”的定义调整到不同的字符范围。

相关内容