我在一家不允许我在我的电脑上安装任何软件的公司工作,我在那里运行糟糕的窗口。
我需要清理从 Intranet 复制的大量文本并保存为 txt 文件。所以我必须使用sed
和/或awk
在线实时编辑器,像这样或这样
这些文字是这样的
01
010010-26.2010.501.0026 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
fdfsadf adsf adsf asdf asdfas fadsf asdfa
02
0011-15.2016.501.0012 fafas fasdf asdf asdfsadf asdfasd fasd asasdff
asdfasd fasd asasdff
asdfasd fasd asasdff
0011-125.2013.501.0012
asdfasd fasd asasdff
看到这样的数字0011-15.2016.501.0012
就是我想要的。我不关心其余的,但我想用所有这些数字创建一个新的干净文本,每行一个。在前面的例子中,我需要一个文本
010010-26.2010.501.0026
0011-15.2016.501.0012
0011-125.2013.501.0012
.501.
总是存在,在所有数字中,作为第 4 组。
我在 sed 在线编辑器上试过这个命令
's/\([0-9]*\-[0-9]*\.[0-9]*\.501\.[0-9]*\)/\1/'
不工作。
AWK 相当简单,b/c 通常 AWK 什么都不做,所以我们只需要告诉它什么时候做事,即在行首打印 ID,如果它在那里
使用 sed 有点不同,b/c 默认情况下 sed 将打印所有内容。(至少这就是这些工具为我工作的方式。)首先,我们需要调用
sed
assed -n
来将其默认行为更改为不执行任何操作。然后我们可以如果我们有匹配的模式,我们需要
p
最后告诉 sed打印结果。您的特定 sed 表达式是一个NOOP,因为它用自己替换每个匹配项并按原样打印其他所有内容。它确实有效,但是您不会更改任何内容,或者更确切地说将其更改为原来的样子。但是只要对这段代码进行很小的修改,你就可以获得你想要的:
注意三点:
-n
switch,表示默认不打印任何内容.*
在选择的组的末尾(...)
p
作为最后一个命令意味着打印这一行结果:
顺便说一句,您可以通过添加和使用扩展正则表达式来简化一点
-E
,即去掉捕获组前面的反斜杠:两种方式都适用于提到的网页。