我有一个杂乱的文本文件(大约30 Ko),其中包含必须使用shell脚本重新组织的数据。该文件包含一个简单的模式:一个"参数编号"(值在10001和10999之间)后面跟着几个其他值(浮点值)。值用空格分隔。我希望我的文件是:在每一行上,一个"参数编号"后面跟着它的值(一行中只有一个"参数值")。值用空格分隔。
我的问题很容易理解:
"混乱"的文件看起来是这样的:
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]
(regex)之前的"空格"
Bash脚本和regex对我来说是新事物,无法找到简单的解决方案。
我正在考虑使用bash ${string//substring/newsubstring}
参数展开,但我仍然不知道如何在regex中说出"模式10[0-9][0-9][0-9]
之前的空间"。
我想写一个bash脚本(或一个简单的命令),用回车替换模式10[0-9][0-9][0-9](regex)之前的"空格"。
你可以使用sed。
sed 's/[[:space:]](10[0-9][0-9][0-9])/n1/g' file
或
sed 's/ (10[0-9][0-9][0-9])/n1/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])/n1/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)