Text-Processing

將一行的開頭與那裡的東西匹配?

  • July 17, 2015

我想匹配該行包含某些內容的行的開頭。

Perl/Sed 中的命令

's/^.?/\section{}/g'

但這裡的問題是它也替換了句子的第一個字元。

你怎麼能在非空行的開頭添加一些東西?

sed '/./s/^/\\section{}/'

\section{}添加到包含至少一個有效字元的每一行。

sed '/^$/!s/^/\\section{}/'

\section{}添加到每個非空行(即包含至少一個byte的行)。

sed 's/./\\section{}&/'

將在每一行的第一個有效字元之前插入\section{}(具有這樣一個有效字元)。(&被匹配的部分替換)。

如果您在每個字元多字節的語言環境中(例如現在趨於規範的 UTF-8)但處理以擴展的單字節字元集編碼的文本,則字節字元之間的這些區別可能是有意義的。

例如:

$ locale charmap
UTF-8
$ echo Москва | iconv -t iso-8859-5 | sed 's/./\\section{}&/' | iconv -f iso-8859-5
Москва

(當以 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{}Москва

引用自:https://unix.stackexchange.com/questions/209767