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