我在一个非常大的文档中有以下字符串:
1.test.html#
2.test.md#
3.http://test.html#
4.https://test.md#
5.http://test.md#
6.test2.md#
现在我想将每个替换.md#
为但仅当字符串中.html#
没有时。http
所以只有 2 和 6 应该有替换。我怎样才能在 shell 脚本中做到这一点?
答案1
使用 GNU sed。如果当前行(模式空间)包含http
跳转到脚本末尾 ( b
)。否则进行搜索和替换。
sed '/http/b; s/\.md#/.html#/' file
输出:
1.测试.html# 2.测试.html# 3.http://test.html# 4.https://test.md# 5.http://test.md# 6.test2.html#
如果您想“就地”编辑文件,请使用 sed 的选项-i
。
看:man sed
答案2
perl -pe'/http/ or s/\.md#/.html#/' input.txt > output.txt
perl -pe'/http/||s/\.md#/.html#/' input.txt > output.txt #same
perl -i -pe'/http/||s/\.md#/.html#/' file.txt #edit inplace, changes file.txt
perl -i.bk -pe'/http/||s/\.md#/.html#/' files*.txt #same with backups to .bk files
sed
他们awk
很棒,但perl
拥有他们所拥有的一切,甚至更多。