1

sed '/\r $/ {N s/\n//}'
sed: -e выражение # 1, символ 10: дополнительные символы после команды

Я хочу понять, что не так с моей командной строкой. Когда я могу выполнить некоторые из следующих действий в сценарии, но не в командной строке.

Я работал над учебником на www.grymoire.com. Когда я застрял в разделе Работа с несколькими линиями. Эти скрипты отлично работают.

#!/bin/sh
sed '
# look for a "#" at the end of the line
/#$/ {
# Found one - now read in the next line
    N
# delete the "#" and the new line character, 
    s/#\n//
}' file

В моем случае я ищу \r или вернуть ^ M.

#!/bin/sh
sed '
# look for a "#" at the end of the line
/\r$/ {
# Found one - now read in the next line
    N
# delete the "#" and the new line character, 
    s/\r\n//
}' file

Проблема в том, что когда я пытаюсь преобразовать его в однострочную команду оболочки, она выдаёт мне ошибки.

sed '/\r $/ {N s/\n//}'
sed: -e выражение # 1, символ 10: дополнительные символы после команды
sed '/\r $/ {N s/\n//}'
sed: -e выражение # 1, символ 9: дополнительные символы после команды
sed '/\r $/ {Ns/\n//}'
sed: -e выражение # 1, символ 8: дополнительные символы после команды

Я хочу понять, что не так с моей командной строкой. Когда я могу сделать следующее в сценарии, но не в командной строке.

Я создал сценарий sed для выполнения работы, которую я хочу.

cat test.sed 
#!/bin/sed -f
/\r$/ {
N 
s/\n//
}

1 ответ1

4

Вам нужно использовать точку с запятой ; разделить команды sed на одной строке. В частности, между N и s Точка с запятой не нужна, если есть новая строка, поэтому ваша форма скрипта работает.

менять

sed '/\r$/ {N s/\n//}'  

в

sed '/\r$/ {N; s/\n//}'
             ^

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .