Добавление строки в файл с помощью sed в сценарии оболочки - PullRequest
1 голос
/ 31 марта 2020

У меня есть файл, который содержит 109 строк.

Я выполняю две операции в строке, показанной ниже.

# Delete line 74
sed -i '74d' Test.txt

# Add the entry to line 109
  sed -i "109iThis is the string" Test.txt

Я вижу, как строка 74 удаляется из моего Test.txt, но по некоторым причинам, теперь мой Test.txt имеет только 108 строк, и я не вижу, чтобы This is the string был добавлен к строке 109.

Я не уверен, в чем заключается ошибка. Как я могу это исправить?

Ответы [ 4 ]

2 голосов
/ 31 марта 2020

Вы можете использовать эту команду POSIX sed:

sed -i.bak '74d; $ a\
This is the string
' file

Это удалит 74-ю строку из файла и добавит строку в конце и сохранит внесенные изменения.

Обратите внимание, что это будет работать и с gnu-sed.

1 голос
/ 31 марта 2020

Джонатан уже упоминал о потенциальных проблемах с использованием sed -i (нестандартный, ведет себя по-разному, если поддерживается в зависимости от реализации, и т. Д. c.). Избегайте их, используя ed для редактирования файлов:

ed -s Test.txt <<EOF
109a
This is the string
.
74d
w
EOF

Обратите внимание, как это добавляется, а затем удаляется. Поскольку ed действует на все файлы, а не на поток строк, команды для действия на указанных c строках могут быть в любом порядке.

1 голос
/ 31 марта 2020

Если вы удалите строку, в файле останется только 108 строк. Исправьте свою вторую команду соответственно:

sed -i "108iThis is the string" Test.txt
0 голосов
/ 31 марта 2020

Строка № 109 не существует (вы удалили одну, 109-1 = 108), вы должны добавить ее до того, как сможете ввести в нее текст.

Решение: sed -i '$ a <text>' Test.txt Будет добавлена ​​новая строка с выделенным текстом.

...