我想用换行符+数字+换行符替换字符串中的所有数字。
更改字符串
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
答案 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