5

Я пытаюсь добавить строку в конце всех строк в текстовом файле, но у меня есть ошибка где-то.

Пример:

У меня есть это в текстовом файле:

begin--fr.a2dfp.net
begin--m.fr.a2dfp.net
begin--mfr.a2dfp.net
begin--ad.a8.net
begin--asy.a8ww.net
begin--abcstats.com
...

Я бегу:

sed -i "s|\x0D$|--end|" file.txt

И я получаю:

begin--fr.a2dfp.net--end
begin--m.fr.a2dfp.net--end
begin--mfr.a2dfp.net--end
begin--ad.a8.net
begin--asy.a8ww.net--end
begin--abcstats.com
...

Строка добавляется только в определенные строки, а не в другие.

Есть идеи почему?

3 ответа3

10

\x0D - возврат каретки, который может отображаться или не отображаться в вашем текстовом редакторе. Так что, если вы редактировали файл как в Windows, так и в системе Unix/Linux, может быть сочетание новых строк. Если вы хотите надежно удалить возврат каретки, вам следует использовать dos2unix . Если вы действительно хотите добавить текст в конец строки, просто используйте sed -i "s|$|--end|" file.txt .

4

Есть несколько способов сделать это:

  1. Perl

    perl -i -pe 's/$/--end/' file.txt
    
  2. СЕПГ

    sed -i 's/$/--end/' file.txt
    
  3. AWK

    awk '{$NF=$NF"--end"; print}' file.txt > foo && mv foo file.txt
    
  4. ракушка

    while IFS= read -r l; do 
     echo "$l""--end"; 
    done < file.txt > foo && mv foo file.txt
    
0

Вы можете попробовать использовать ex:

ex +"%s/$/--end/g" -cwq foo.txt 

что эквивалентно vi -e .

Опция -i не совсем совместима между Linux и Unix и может быть недоступна в других операционных системах.

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