用 \n+numbers+\n 替换所有数字

replace all numbers with \n+numbers+\n

我想用换行符+数字+换行符替换字符串中的所有数字。

更改字符串

1xxx2yyy3zzz

进入

  1
  xxx
  2
  yyy
  3
  zzz

他们两个都不能成功。

echo "1xxx2yyy3zzz"  |tr  '0-9'  '\n0-9\n'
echo "1xxx2yyy3zzz"  |tr  '[0-9]'  '\n[0-9]\n'
echo "1xxx2yyy3zzz"  |tr  [:digit:]    \n[:digit:]\n

我不知道在这种情况下使用 tr 是否可行或有效。但是 sed 你可以试试:

echo "1xxx2yyy3zzz"| sed 's/[0-9]/\n&\n/g'| sed '/^\s*$/d'

所以基本上它会将每个数字替换为 \n number \n。最后sed是删除空行(开始和结束)。

另一种形式

只使用一个 sed 如果您的文本在 file:

sed 's/[0-9]/\n&\n/g;s/\(^\n\|\n$\)//' file
  • 第一个替换 (s/[0-9]/\n&\n/g;) 将任何 number 替换为 \n number \n
  • 第二次替换(s/\(^\n\|\n$\)//)删除了开头和结尾的不必要的新行。

考虑到您的 Input_file 与显示的示例相同,那么以下内容可能会对您有所帮助。

sed -E 's/[a-zA-Z]+/\n&\n/g;s/\n$//' Input_file

说明: 现在也为上面的代码添加说明。仅供说明之用。

sed -E '       ##Starting sed here and -E option is for extended regex enabling it.
s              ##s is for substitution.
/[a-zA-Z]+/    ##look for regex all small of capital letter alphabets and substitute them with following regex.
\n&\n/         ##Substitute above match with a NEW line matched value and a NEW line here.
g;             ##g means perform this action to all matched patterns on current line.
s/             ##Starting a new substitution here.
\n$            ##Substituting NEW LINE which is coming in last of the line with following.
//             ##Substituting above with NULL.
' Input_file   ##Mentioning Input_file name here.

这可能对你有用 (GNU sed):

sed 's/[[:digit:]]\+/\n&\n/g;s/^\n\|\n$//g' file

用换行符包围数字,然后删除行首和行尾的所有额外换行符。

另外两个玩具解决方案:

sed -r ':a;s/(([^0-9\n])([0-9]+))|(([0-9]+)([^0-9\n]))/\n/g;ta'

这很有趣,因为它在替换的 RHS 中使用 ghost 反向引用。

sed '/\n/!s/[[:digit:]]\+/\n&\n/g;/^\n/!P;D' file

这会进行一次性替换,然后使用 P D 组合循环遍历该行,删除由换行符分隔的字符串部分。

与python3.

>>> import re
>>> string="1xxx2yyy3zzz"
>>> print(re.sub('(\d+)',r'\n\n',string))

1
xxx
2
yyy
3
zzz
>>> print(re.sub('(\d+)',r'\n\n',string).strip())
1
xxx
2
yyy
3
zzz