我有一个凌乱的文本文件(大约30 Ko),其中包含我必须使用shell脚本重新组织的数据。 该文件展示了一个简单的模式: A"参数编号" (值介于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]
(正则表达式)之前通过回车。
Bash脚本和正则表达式对我来说是新的东西,无法找到一个简单的解决方案。
我正在考虑使用bash ${string//substring/newsubstring}
参数扩展,但我仍然不知道怎样说"模式10[0-9][0-9][0-9]
"之前的空间。在正则表达式。
答案 0 :(得分:1)
希望编写一个bash脚本(或一个简单的命令)来替换" space"在模式10 [0-9] [0-9] [0-9](正则表达式)之前通过回车。
你可以使用sed。
sed 's/[[:space:]]\(10[0-9][0-9][0-9]\)/\n\1/g' file
OR
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)