У меня есть текстовый файл, содержащий список имен file.txt, а затем я просматриваю этот файл, и я хочу создать новый текстовый файл, добавив эти имена в новый текстовый файл и добавив некоторые другие данные в новый текстовый файл. Проблема в том, что команда sed работает нормально, но в некоторых случаях она добавляет несколько повторяющихся символов.
мой файл file.txt
cat file.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
моя команда sed
while IFS = "" read -r name
do
sed -i "s/${name}/uniquemember: ID=${name},ou=people,ou=names,dc=xxxx,dc=xxx/g" file.txt
done<"file.txt"
теперь результирующий файл
uniquemember: ID=aaaaa,ou=people,ou=names,dc=xxx,dc=xxx
uniquemember: ID=bbbbb,ou=people,ou=names,dc=motorola,dc=xxx
uniquemember: ID=ccccc,ou=people,ou=names,dc=motorola,dc=xxx
uniquemember: ID=uniquemember: ID=ddddd,ou=people,ou=names,dc=xxx,dc=xxxg,ou=people,ou=names,dc=xxx,dc=xxx
uniquemember: ID=eeeee,ou=people,ou=names,dc=xxx,dc=xxx
я не уверен, почему так много лишних символов добавлено в эту строку uniquemember: ID=uniquemember: ID=ddddd,ou=people,ou=names,dc=xxx,dc=xxxg,ou=people,ou=names,dc=xxx,dc=xxx
Как я могу это исправить?
Вы читаете файл file.txt и одновременно манипулируете им.
Трудно сказать, не видя ваших фактических данных, но я подозреваю, что у вас есть имя, которое является подстрокой другого имени, например «сэм» и «самуэль». В этом случае, когда вы выполняете замену на «samuel», он работает, как ожидалось, но замена «sam» также заменяет часть на запись «samuel», что приводит к хаосу. Решение: не применяйте изменения, которые применяются только к одной строке, ко всему файлу; обрабатывайте его построчно, внося соответствующие изменения в каждую строку по ходу (как решение @ Ass3mbler делает непосредственно в sed).





Не могли бы вы использовать такую более простую команду?
sed "s/\(.*\)/uniquemember: ID=\1,ou=people,ou=names,dc=xxxx,dc=xxx/g" file.txt
вывод:
uniquemember: ID=aaaaa,ou=people,ou=names,dc=xxxx,dc=xxx
uniquemember: ID=bbbbb,ou=people,ou=names,dc=xxxx,dc=xxx
uniquemember: ID=ccccc,ou=people,ou=names,dc=xxxx,dc=xxx
uniquemember: ID=ddddd,ou=people,ou=names,dc=xxxx,dc=xxx
uniquemember: ID=eeeee,ou=people,ou=names,dc=xxxx,dc=xxx
uniquemember: ID=fffff,ou=people,ou=names,dc=xxxx,dc=xxx
Что выводит
cat -A file.txt