假设我有一个这样的文件:
INSERT INTO table VALUES('1','<p><em>The lazy fox jumps again</em></p>bunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('2','<p><em>The lazy fox jumps again</em></p>bunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('3','<p><em>The lazy fox jumps again</em></p>bunch of other html<p><em>Is the lazy fox crazy?</em></p>')
而我只想删除第一次出现的<p><em>
,</em></p>
所以我最终得到如下结果:
INSERT INTO table VALUES('1','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('2','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('3','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')
... 我怎样才能使用 sed (或 perl) 来实现这一点?语句...:
sed "1,/INSERT INTO/s/<p><em>//g"
... 仅替换文件中第一次出现的条目,而不是每一行。
非常感谢您的帮助。
答案1
如果要处理所有带有 的行INSERT INTO
,请不要提供地址范围。如果只想替换字符串的第一次出现,请不要提供/g
:
sed -e '/INSERT INTO/s/<p><em>//' -e '/INSERT INTO/s/<\/em><\/p>//'
答案2
你可以用以下方法实现它perl
:
perl -pe 's:<p><em>(.*?)</em></p>:$1:' infile
量词.*?
是非贪婪的,因此只会匹配第一对标签。
输出:
INSERT INTO table VALUES('1','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('2','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')
INSERT INTO table VALUES('3','The lazy fox jumps againbunch of other html<p><em>Is the lazy fox crazy?</em></p>')