我尝试使用sed
将文本文件中的所有逗号替换为“;”和“[”之间的空格。示例行是:K01810,GPI,,pgi;,glucose-6-phosphate,isomerase,[EC:5.3.1.9]
,其中我的理想输出是K01810,GPI,,pgi; glucose-6-phosphate isomerase [EC:5.3.1.9]
。
我试过sed 's/;\(.*\)\[/;\1[/g' myfile.txt > newfile
,但这并没有改变什么。
myfile.txt:
09100,Metabolism
09101,Carbohydrate,metabolism
00010,Glycolysis,/,Gluconeogenesis,[PATH:ko00010]
K00844,HK;,hexokinase,[EC:2.7.1.1]
K12407,GCK;,glucokinase,[EC:2.7.1.2]
K00845,glk;,glucokinase,[EC:2.7.1.2]
K25026,glk;,glucokinase,[EC:2.7.1.2]
K01810,GPI,,pgi;,glucose-6-phosphate,isomerase,[EC:5.3.1.9]
K06859,pgi1;,glucose-6-phosphate,isomerase,,archaeal,[EC:5.3.1.9]
K13810,tal-pgi;,transaldolase,/,glucose-6-phosphate,isomerase,[EC:2.2.1.2,5.3.1.9]
K15916,pgi-pmi;,glucose/mannose-6-phosphate,isomerase,[EC:5.3.1.9,5.3.1.8]
K24182,PFK9;,6-phosphofructokinase,[EC:2.7.1.11]
K00850,pfkA,,PFK;,6-phosphofructokinase,1,[EC:2.7.1.11]
K16370,pfkB;,6-phosphofructokinase,2,[EC:2.7.1.11]
字符串
4条答案
按热度按时间2lpgd9681#
字符串
**注意:**为了便于移植,需要使用转义的文本换行符来替换(某些版本的sed将
\n
视为n
):型
pxy2qtax2#
这可能对你有用(GNU sed):
字符串
匹配以
;
开头且不包含[
或,
的任何连续字符,后跟,
,并将,
替换为空格。如果替换成功,则重复直到失败。
at0kjp5o3#
使用这个Perl一行程序:
字符串
或就地更改:
型
Perl一行程序使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中。-p
:一次循环一行输入,默认情况下将其分配给$_
。每次循环迭代后添加print $_
。-i.bak
:就地编辑输入文件(覆盖输入文件)。在重新编译之前,通过在其名称后面附加扩展名.bak
来保存原始文件的备份副本。如果您想跳过写入备份文件,只需使用-i
并跳过扩展名。正则表达式使用这个修饰符:
/e
:将REPLACEMENT
作为s/PATTERN/REPLACEMENT/
中的表达式求值s{PATTERN}{EXPRESSION}
:将PATTERN
替换为EXPRESSION
。(;[^;\[]+)
:文字;
,后跟1个或多个除;
或[
之外的任何字符(注意必须转义:\[
。括号将匹配捕获到变量$1
中。do { $s = $1; $s =~ tr/,/ /; $s }
:将$1
重新分配给$s
,然后将所有出现的,
更改为``(空格)。该块返回最后一个表达式,即更改后的变量$s
。参见:
perldoc perlrun
:如何执行Perl解释器:命令行开关perldoc perlre
: Perl regular expressions (regexes)perldoc perlre
:Perl正则表达式(regex):量词;字符类和其他特殊转义;Assert;捕获组perldoc perlrequick
: Perl regular expressions quick start的j1dl9f464#
使用GNU awk作为
match()
的第三个参数:字符串
或者你可以使用任何awk来做同样的事情:
型