Я должен написать регулярное выражение с помощью sed
, такое, что каждая строка, первый непустой символ которой либо +
, либо -
, должна заканчиваться пробелом и \\\\
.
Например, строка, которая выглядит как:
-u, -\hspace{.01cm}-unset name
должна превратиться в:
-u, -\hspace{.01cm}-unset name \\
Я пытался сделать:
/^[ ]- s/$/ \\\\/g
но не получается. Как я могу сделать это?
$ cat file
-u, -\hspace{.01cm}-unset name
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name \\
+u, -\hspace{.01cm}-unset name
$ sed -E '/^[[:blank:]]*[+-]/s/( \\\\)?$/ \\\\/' file
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name
+u, -\hspace{.01cm}-unset name \\
-u, -\hspace{.01cm}-unset name \\
u, -\hspace{.01cm}-unset name \\
+u, -\hspace{.01cm}-unset name \\
Приведенная выше команда sed
находит строки, начинающиеся с +
или -
, которым предшествуют необязательные пробелы или табуляция. Как только такая строка найдена, она удаляет все \\
, которым предшествует пробел в конце строки (, если он присутствует ), а затем добавляет пробел и \\
в конце строки.
Таким образом, мы не добавляем \\
в конец строк, в которых уже есть эта строка.