6

Я пытаюсь использовать команду r (read, чтобы добавить содержимое data2 к данным. Я хочу добавить содержимое после строки, содержащей «два». Я хочу удалить строку, содержащую «два».

Но я врезался в кирпичную стену. Это похоже на ошибку, но, возможно, это просто моя собственная глупость.

Хорошо, эта команда работает.

% sed -r '/two/ r /tmp/data2' <  /tmp/data
one
two
five
six
seven
three
four

Сед кажется немного финики про пространства .. Не понятно почему, но я буду жить с этим.

% sed -r '/two/ r /tmp/data2  ' <  /tmp/data
one
two
three
four

Моя цель - запустить (d) delete после команды read, чтобы удалить исходную строку. Это насколько я понимаю.

% sed -r '/two/{ r /tmp/data2}' <  /tmp/data
sed: -e expression #1, char 0: unmatched `{'

Я почти уверен, что '{' подбирается, это не самая длинная команда в мире.

Что я на самом деле хочу запустить ...

% sed -r '/two/{ r /tmp/data2; d }' <  /tmp/data

Система Ubuntu 12. ГНУ САС.

1 ответ1

8

r /file/path не должно быть ничего после него в строке.

Вы можете найти этот сайт полезным в качестве краткого описания команд для sed

echo 'one
two
five
six
seven
three
four' >inputfile

echo 'contents of readfile' >readfile

sed  '/two/{r readfile
         d}' inputfile

Примечание: вы можете использовать оболочку для параметризации sed, используя "двойные кавычки". Они позволяют расширение переменной оболочки. r воспринимает все пробелы буквально ... так что не заключайте в кавычки имя файла и не используйте завершающий пробел (пробел между r и /file/path вполне допустим).

rfile='/tmp/readfile with   multiple spaces in name'
sed  "/two/{r $rfile
       d}" inputfile

выход

one
contents of readfile
five
six
seven
three
four

На заметку: действительно нет значения, используя < для вашего входного файла. Используйте параметр входного файла sed (он упрощает работу).

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