Написание команды sed

Я должен написать регулярное выражение с помощью sed, такое, что каждая строка, первый непустой символ которой либо +, либо -, должна заканчиваться пробелом и \\\\. Например, строка, которая выглядит как:

    -u, -\hspace{.01cm}-unset name

должна превратиться в:

    -u, -\hspace{.01cm}-unset name \\

Я пытался сделать:

/^[       ]- s/$/ \\\\/g 

но не получается. Как я могу сделать это?

-1
14.11.2018, 21:16
1 ответ
$ 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находит строки, начинающиеся с +или -, которым предшествуют необязательные пробелы или табуляция. Как только такая строка найдена, она удаляет все \\, которым предшествует пробел в конце строки (, если он присутствует ), а затем добавляет пробел и \\в конце строки.

Таким образом, мы не добавляем \\в конец строк, в которых уже есть эта строка.

1
28.01.2020, 05:07

Теги

Похожие вопросы