我有这样一个csv文件:
# 2022 5 2 8 1 24.8-17.1800 -66.3260 3.6 0.2 0.0 0.0 0.0 2
SOD6 2.20 1.00 P
SOD6 3.98 1.00 S
SOD5 3.21 1.00 P
SOD5 5.79 1.00 S
SOD0 4.07 1.00 P
SOD0 7.10 1.00 S
SOD3 6.47 1.00 P
SOD3 11.20 1.00 S
# 2022 5 3 0 10 16.8-17.3820 -65.6330 28.0 0.7 0.0 0.0 0.3 3
SOD2 6.24 1.00 P
SOD2 10.49 1.00 S
SOD9 7.66 1.00 P
SOD9 12.75 1.00 S
SOD1 10.34 1.00 P
SOD3 11.42 1.00 P
SOD3 21.11 1.00 S
# 2022 5 3 11 28 10.8-17.7600 -65.9840 6.6 0.7 0.0 0.0 0.1 4
SOD3 6.55 1.00 P
SOD2 6.89 1.00 P
SOD2 11.70 1.00 S
SOD9 8.82 1.00 P
SOD1 10.04 1.00 P
SOD1 17.60 1.00 S
我试着在每个标题的第24位加一个空格,这是标题
# 2022 5 2 8 1 24.8-17.1800 -66.3260 3.6 0.2 0.0 0.0 0.0 2
因此,标题将如下所示:
# 2022 5 2 8 1 24.8 -17.1800 -66.3260 3.6 0.2 0.0 0.0 0.0 2
我尝试了以下代码:
# To read the headers and to add a space on 24th place
# of each header, where 'phase.dat' is the csv file
grep '# 2022' phase.dat | sed 's/ ./&\s /24'
但是它没有在想要的位置增加空间。有人知道我做错了什么吗?
祝你平安并致以最诚挚的问候,托尼诺
2条答案
按热度按时间1zmg4dgp1#
就像这样。
如果标题是你真正想要提取和编辑的。
快速分解
sed
代码^
是正则表达式中的锚,意思是从头开始。( )
括号内是捕获组。由于它是B.R.E.(基本正则表达式),因此需要转义/在前面加上\
[ ]
是一个括号表达式^
(它取反),但这意味着除了它旁边的字符之外的所有内容,在本例中是-
*
是[ ]
的下一个,他们称之为量词,意思是零个或多个字符串/字符。# 2022
,直到到达第一个-
.*
表示零或更多数量的字符串/字符,基本上捕获字符串的其余部分。$
也是一个锚,意思是在末端。\1
和\2
是指捕获组1和2,这是( )
中的内容vc9ivgsu2#
将\s替换为空格,如下所示