【发布时间】:2018-08-28 20:16:16
【问题描述】:
将以下几行视为文本文件:
START This is a
sample paragraph that has special characters like new lines
spaces, tabs, quotes "abc", equals =, angular brackets <abc>, front slash / and might contain the starting string that should be ignored
START and
END
START
dfgfah
END
使用 sed,我想只替换第一次出现的 START 和第一次出现的 END 之间的文本。
我期待的结果是这样的:
START new_text END
START
dfgfah
END
我尝试的是这样的:
sed ':a;N;$!ba;s/START.*END/START New text END/' sample.txt>sample_2.txt
但结果是:
START New text End
在第一次出现 END 之前如何替换?
【问题讨论】:
-
这对于 Perl 来说是微不足道的:
perl -0777 -pe 's/START.*?END/START New text END/s' -
所有版本的 linux 都支持 perl 吗?它必须在 SuSe、IBM NIX 和其他几个版本上得到支持
-
Perl 几乎可以在所有操作系统上运行(包括 Linux 和更深奥的东西,如 HP/UX、VMS 等)。不过,我不知道它是否是标准操作系统安装的一部分。