我有一个这样的文件:
1. Dé 33 2. iis ET 3. 56 RRE- 4. etc...
我想得到:
1. Dé 33
2. iis ET
3. 56 RRE-
4. etc...
我想用grep或sed。我尝试了许多不成功的命令。我找到的最接近的命令是:
cat myfile | grep -o '[0-9]\{1,2\}\. '
导致:
1.
2.
3.
4.
所以,基本上我需要的是一个grep函数,它可以选择两个正则表达式之间的东西(例如,我希望所有东西都在一个数字之间徘徊)
有什么想法吗? 非常感谢!
答案 0 :(得分:3)
使用sed
:
$ echo " 1. Dé 33 2. iis ET 3. 56 RRE- 4. etc..." | sed 's/[0-9]\+\./\n&/g'
1. Dé 33
2. iis ET
3. 56 RRE-
4. etc...
<强>解释
搜索模式
[0-9] \ +搜索数字,列表中必须存在一位数字,例如[0-9] *可以找到数字但也可以是空字符串。
\。在这种情况下,dot必须被反击。在正则表达式代表anychar
\ n将添加换行符,
&安培;将使用相同的搜索模式,换句话说,除了在条件之前插入\ n时,没有任何变化
g最后将替换所有找到的搜索模式
短期内的想法是将newline \ n char放在以点
结尾的数字之前答案 1 :(得分:2)
您可以使用此awk
awk '{for (i=1;i<=NF;i++) printf "%s%s",$i,(i%3==0?RS:FS)}' file
1. De 33
2. iis ET
3. 56 RRE-
4. etc..
答案 2 :(得分:0)
如果你的grep支持-P
,那么你可以使用下面的grep命令。
$ grep -oP '.*?(?=\s\d+\.|$)' file
1. Dé 33
2. iis ET
3. 56 RRE-
4. etc...
.*?(?=\s\d+\.|$)
必须遵循零个或多个字符的非贪婪匹配[再按一个空格后跟一个或多个数字,再后跟一个点] 或结束时行锚$
。