Команда sed insert line для добавления текста с новой строкой OSX - PullRequest
1 голос
/ 27 февраля 2020

Я пытаюсь вставить текст в сотую строку в файле, используя sed, и синтаксис, который я нашел на других форумах:

sed -i '' "100i\ text to insert" filename

Когда я использую это, я могу добавить текст в определенной строке, но он влияет на другой текст, который уже существует и помещает его в ноль.

Я хочу добавить новую строку до и после текста, добавленного в файл.

Я пробовал это sed -i '' "100i\ text to insert other text to insert" filename, но это не сработало, как указано.

Это вывод, когда я запускаю указанную выше команду. порядок должен быть <key>, а ниже должен быть тег <string>.

<key>NSBluetoothAlwaysUsageDescription</key>    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This will allow "App" to find and connect to Bluetooth accessories. This app may also use bluetooth to know when you are nearby.</string>   <string>This app requires constant access to your location in order to track your position, even when the screen is off or the app is in the background.</string>

Не могу понять, что добавить в команду, чтобы добавить новую строку.

Я не хочу нарушать порядок, я просто хочу, если я вставляю текст в строку 100, и если текст уже есть, этот текст должен go перейти на новую строку.

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Если вы хотите sh добавить новую строку, вы должны использовать: $'\n'; ANSI цитирование

Дополнительная информация о sed newline


Чтобы ответить на вопрос; используйте:

sed -i '' -e "3s/^//p; 3s/^.*/text to insert/" /tmp/so.txt
  1. 3s/^//p; Дублирующую строку № 3
  2. 3s/^.*/text to insert/" Замените новую строку № 3 своим текстом

enter image description here Edit;

sed -i '' -e "3s/^//p; 3s/^.*/<key>NSBluetoothAlwaysUsageDescription<\/key>/" /tmp/so.txt

Не забудьте убрать любые / символов!

0 голосов
/ 27 февраля 2020

Попробуйте ed (1), если хотите.

printf '%s\n' 3a 'text to insert' . w | ed -s file

Здесь экранирование не требуется.

printf '%s\n' '100a' '<key>NSBluetoothAlwaysUsageDescription</key>    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>' '<string>This will allow "App" to find and connect to Bluetooth accessories. This app may also use bluetooth to know when you are nearby.</string>   <string>This app requires constant access to your location in order to track your position, even when the screen is off or the app is in the background.</string>' . w | ed -s file.txt

... или использование Heredo c

ed -s file.txt <<'EOE'
100a
<key>NSBluetoothAlwaysUsageDescription</key>    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This will allow "App" to find and connect to Bluetooth accessories. This app may also use bluetooth to know when you are nearby.</string>   <string>This app requires constant access to your location in order to track your position, even when the screen is off or the app is in the background.</string>
.
w
EOE

Просто замените file.txt на имя вашего файла.

...