因此,我试图在linux上使用sed来实现regex。我有这些台词:
│ .--. 3..6 °C │ _ /"".-. 6..8 °C │ _ /"".-. 2..6 °C │ _ /"".-. 0..4 °C │
│ _ /"".-. -2..+3 °C │ _ /"".-. 1..5 °C │ ,\_( ). 1..4 °C │ ,\_( ). -1..+2 °C │
│ ( ). -1..+1 °C │ ( ). -2..+2 °C │ ( ). -4..+2 °C │ ( ). -4..+2 °C │
我如何只提取的数字和它们的符号?但他们中的每一个人?我在使用组和regexes时非常草率,任何提示和解释都会有帮助。我得到了这个正则表达式,它可以缩短问题,但我仍然不能提取每一个匹配。希望能帮上忙。
sed -n -E "/[+-]?[0-9]+\.{2}[+-]?[0-9]+/p"
我希望我的输出为3,6,6,8,6,0,4,如果在第一行,第二和第三行:
-2,+3 1,5 1,4 -1,+2
-1,+1-2,+2-4,+2-4,+2
发布于 2020-03-22 16:15:49
这可能对您有用(GNU sed):
sed -E 's/([+-]?[0-9]+)\.\.([+-]?[0-9]+)/\n\1,\2\n/g;s/^[^0-9+-].*$/ /mg;s/^ |\n| $//g' file
用换行符包围有效字符串(同时将..
转换为,
)。
用空格替换所有无效字符串。
删除线的前端和末端的空格和任何引入的新行。
注意:在替换命令上使用m
标志。
另一种方法是从头到尾遍历行,删除无效字符:
sed -E 's/^/\n/;:a;s/\n([+-]?[0-9]+)\.\.([+-]?[0-9]+)/\1,\2 \n/;ta;s/\n./\n/;ta;s/ ?\n//' file
https://stackoverflow.com/questions/60800832
复制相似问题