sed -Заменить '^M', если я не могу написать '^M'

Если у вас есть список путей, которые вы хотели бы просмотреть и проверить на существование, то я предполагаю, что вы хотели бы либо сделать что-то с теми, которые существуют, либо с теми, которых не существует. или для обоих наборов путей.

При стандартной оболочке это лучше всего делать в цикле.

for pathname in /the/first/path /the/second/path /some/other/path
do
    if [ -e "$pathname" ]; then
        printf 'Path "%s" exists\n' "$pathname"
    else
        printf 'Path "%s" does not exist\n' "$pathname"
    fi
done
0
08.06.2021, 02:51
2 ответа

На самом деле, возврат каретки помогает определить неправильный перенос строки:

s '/^M$/{N;s/^M\n//;}' test

Как писал steeldriver, вы обычно можете произвести это ^Mс помощью ctrlV , а затем ctrlM .

Команда означает

  • /^M$/{...}:В строках с разрывом страницы в конце строки выполнять команды в фигурных скобках
  • Next добавляет следующую строку в буфер с новой строкой между строками
  • s/^M\n//sзаменяет возврат каретки + новую строку ничем (удаляет разрыв строки)

Этот простой сценарий предполагает, что линия разрывается не более одного раза.В противном случае вам понадобится что-то вроде

sed 'H;1h;$!d;x;s/^M\n//g' file
0
20.08.2021, 14:14

Один из способов получить ^M, представляющий новую строку (, или ввести )для замены в sed или vi — ввести:

ctrlVввод

0
20.08.2021, 14:20

Теги

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