繁体   English   中英

使用unix shell在文本文件中的正则表达式之前插入回车符

[英]insert carriage return before a regular expression in a text file using unix shell

我有一个凌乱的文本文件(大约30 Ko),其中包含必须使用Shell脚本重新组织的数据。 该文件显示一个简单的模式:“参数号”(值介于10001和10999之间)后跟其他几个值(浮点数)。 值用空格分隔。 我希望我的文件是:在每一行上,一个“参数编号”后跟它的值(一行中只有一个“参数编号”)。 值用空格分隔。

我的问题很容易理解:

“ messy”文件如下所示:

10001 x(1,1) x(1,2) ... x(1,n) 10002 x(2,1) x(2,2) ... x(2,n) 10003 x(3,1) x(3,2) ... x(3,n) [..and so on to..] 10999 x(999,1) x(999,2) ... x(999,n) 

其中x(i,j)是浮点数

我希望它是:

10001 x(1,1) x(1,2) ... x(1,n) 
10002 x(2,1) x(2,2) ... x(2,n) 
10003 x(3,1) x(3,2) ... x(3,n) 
...
10999 x(999,1) x(999,2) ... x(999,n) 

我想写一个bash脚本(或一个简单的命令),用回车代替模式10[0-9][0-9][0-9] (正则表达式)之前的“空格”。

Bash脚本和regex对我来说是新事物,无法找到简单的解决方案。

我正在考虑使用bash ${string//substring/newsubstring}参数扩展,但我仍然不知道怎么说“模式10[0-9][0-9][0-9]之前的空格10[0-9][0-9][0-9] “在正则表达式中。

想要编写一个bash脚本(或一个简单的命令),以模式10 [0-9] [0-9] [0-9](正则表达式)之前的回车替换“空格”。

您可以使用sed。

sed 's/[[:space:]]\(10[0-9][0-9][0-9]\)/\n\1/g' file

要么

sed 's/ \(10[0-9][0-9][0-9]\)/\n\1/g' file

在基本sed中,捕获组由\\(..\\)

例:

$ cat file
0001 x(1,1) x(1,2) ... x(1,n) 10002 x(2,1) x(2,2) ... x(2,n) 10003 x(3,1) x(3,2) ... x(3,n) [..and so on to..] 10999 x(999,1) x(999,2) ... x(999,n) 
$ sed 's/[[:space:]]\(10[0-9][0-9][0-9]\)/\n\1/g' file
0001 x(1,1) x(1,2) ... x(1,n)
10002 x(2,1) x(2,2) ... x(2,n)
10003 x(3,1) x(3,2) ... x(3,n) [..and so on to..]
10999 x(999,1) x(999,2) ... x(999,n) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM