Léo*_* 준영 1 sed perl text-processing regular-expression
我想匹配该行包含某些内容的行的开头。
Perl/Sed 中的命令
's/^.?/\section{}/g'
Run Code Online (Sandbox Code Playgroud)
但这里的问题是它也替换了句子的第一个字符。
你怎么能在行的开头添加一些非空行的东西?
sed '/./s/^/\\section{}/'
Run Code Online (Sandbox Code Playgroud)
将添加\section{}
到包含至少一个有效字符的每一行。
sed '/^$/!s/^/\\section{}/'
Run Code Online (Sandbox Code Playgroud)
将附加\section{}
到每个非空行(即包含至少一个字节的行)。
sed 's/./\\section{}&/'
Run Code Online (Sandbox Code Playgroud)
将\section{}
在每一行(具有这样一个有效字符)的第一个有效字符之前插入。(&
被匹配的部分替换)。
如果您处于每字符多字节的语言环境(例如现在趋于规范的 UTF-8)但处理以扩展的单字节字符集编码的文本,那么字节和字符之间的这些区别可能很有意义。
例如:
$ locale charmap
UTF-8
$ echo ?????? | iconv -t iso-8859-5 | sed 's/./\\section{}&/' | iconv -f iso-8859-5
??????
Run Code Online (Sandbox Code Playgroud)
(当以 iso-8859-5 编码时, ?????? 的任何结果字节值都不构成 UTF-8 中的有效字符,因此/./
不匹配任何内容)。
由于在您的情况下,编码不会成为问题,因为您插入的文本无论如何都是 ASCII,您可以将语言环境修复为 C 以避免意外:
$ echo ?????? | iconv -t iso-8859-5 | LC_ALL=C sed 's/./\\section{}&/' | iconv -f iso-8859-5
\section{}??????
Run Code Online (Sandbox Code Playgroud)