way*_*ast 5 regex bash perl awk sed
我有一个具有以下特征的文本文件:
我已经在一些行中添加了一些注释,并提供了对原始单词进行更改的暂时建议,现在我想使用sed为我做出这些更改.所以,为了给出更清晰的图片,我的文件看起来像这样:
NO NO O
SIGNS NN O #NNS
GIVEN VBD B-VP #VBN
AT IN O
THIS NN O
TIME NN O ## B-NP
. PER O
...
Run Code Online (Sandbox Code Playgroud)
1#的注释用于替换行中的SECOND字,用2#的注释用于替换行中的THIRD字.有人能用sed(或awk,或其他任何东西)建议一种方法吗?再次澄清(希望如此),我的目标是获得#或##之后的模式,并用匹配的模式替换该行的第n个单词.
谢谢.
这对你有用:
awk '/#/{sub(/# +/,"#");n=gsub(/#/,"",$NF);$(n+1)=$NF;$NF="\t\t#"}1' file
Run Code Online (Sandbox Code Playgroud)
/#/{ ... }
:搜索包含#
并执行以下步骤的行...sub(/# +/,"#")
:删除注释和注释之间的所有空格#
(如有必要)n=gsub(/#/,"",$NF)
:删除#
最后一个字段中的所有内容$NF
,并将#
删除的个数设置为变量n
$(n+1)=$NF
:将n+1字段设置$(n+1)
为新的最后一个字段$NF
,该字段已全部#
剥离$NF="\t\t#"
:将最后一个字段设置$NF
为两个选项卡,后跟一个#
1
:告诉awk
打印更改后的行的快捷方式file
:您的输入文件$ awk '/#/{sub(/# +/,"#");n=gsub(/#/,"",$NF);$(n+1)=$NF;$NF="\t\t#"}1' file
NO NO O
SIGNS NNS O #
GIVEN VBN B-VP #
AT IN O
THIS NN O
TIME NN B-NP #
. PER O
...
Run Code Online (Sandbox Code Playgroud)
注意:如果您的注释始终跟#
在 之间且中间有零个空格,则可以删除sub(/# +/,"#");
命令的整个部分以使其更短