试图做到这一点:仅在第一行匹配后插入sed?
sed -e '/^MatchMeOnce/i\
MATCHED'
的示例文本
:
Line1
Line2
MatchMeOnce
Line4
MatchMeOnce
Line6
我怎样才能得到它只匹配最开头的记录发生,并不比赛在随后的行?
Line1
Line2
MATCHED
Line4
MatchMeOnce
Line6
试图做到这一点:仅在第一行匹配后插入sed?
sed -e '/^MatchMeOnce/i\
MATCHED'
的示例文本
:
Line1
Line2
MatchMeOnce
Line4
MatchMeOnce
Line6
我怎样才能得到它只匹配最开头的记录发生,并不比赛在随后的行?
Line1
Line2
MATCHED
Line4
MatchMeOnce
Line6
GNU SED具有t
命令分支到脚本的端(或者给定的标记物)的任何取代时匹配。
我个人使用perl -ne
和perl -ane
(我想有些人使用Ruby),除非awk或sed解决方案非常明显。但是我意识到一些系统仍然可以在不使用Perl的情况下使用awk和sed,并且难以安装Perl;而且有些程序员更喜欢awk和sed。
sed
(不是很明显):
sed '1,/^MatchMeOnce$/ {/^$/\c
MATCHED
}'
awk
(明显):
BEGIN {
matched = 0
}
/^MatchMeOnce$/ {
if (matched == 0) {
print "MATCHED"
matched = 1
next
}
}
{ print }
perl
也很酷...
希望或多或少的作品:-)
$ sed '/MatchMeOnce/{s//MATCHED/;:a;n;ba}' input.txt
Line1
Line2
MATCHED
Line4
MatchMeOnce
Line6
这可能会为你工作:
sed '1,/MatchMeOnce/s//MATCHED/' file
这将为只要MatcMeOnce
是二号线或更大,或者这个(GNU SED)的sed的所有变化工作:
sed '0,/MatchMeOnce/s//MATCHED/' file
这为迎合以上边缘条件:
或者另一替代方案(所有SED的),其吸食整个文件到存储器:
sed ':a;$!{N;ba};s/MatchMeOnce/MATCHED/' file
,如果你要选择的第n个而不是MatchMeOnce
所有你需要做1日起,在该额外的好处是改变发生标志即改变第二次出现:
sed ':a;$!{N;ba};s/MatchMeOnce/MATCHED/2' file
要改变最后一次使用:
sed ':a;$!{N;ba};s/\(.*)MatchMeOnce/\1MATCHED/' file
sed:-e表达式#1,字符24:未知命令:'\' – kev 2012-03-27 05:41:55