将所有数字替换为\ n +数字+ \ n

时间:2018-07-29 13:38:18

标签: bash awk sed tr

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

更改字符串

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

4 个答案:

答案 0 :(得分:2)

考虑到您的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.

答案 1 :(得分:1)

我不知道在这种情况下是否可以使用happens before。但是使用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)删除开始和结束处不必要的新行。

答案 2 :(得分:0)

这可能对您有用(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]))/\2\5\n\3\6/g;ta'

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

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

这将执行一次一次性替换,然后使用P D组合来循环遍历行,以切掉由换行符分隔的字符串的各个部分。

答案 3 :(得分:0)

使用python3。

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

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