Добавить текст в конце каждой строки

Я в командной строке Linux, и у меня есть файл с

127.0.0.1
128.0.0.0
121.121.33.111

Я хочу

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

Я помню, что мои коллеги использовали sed для этого, но после прочтения руководства sed все еще не ясно, как это сделать в командной строке?

Ответ 1

Вы можете попробовать что-то вроде:

sed 's/$/:80/' ips.txt > new-ips.txt

При условии, что формат файла такой же, как вы описали в своем вопросе.

Команда подстановки s/// соответствует (находит) конец каждой строки в вашем файле (используя символ $) и затем добавляет (заменяет) :80 к конец каждой строки. Файл ips.txt является вашим входным файлом... а new-ips.txt является вашим вновь созданным файлом (конечный результат ваших изменений.)


Кроме того, если у вас есть список IP-номеров, к которым уже подключены номера портов (как отмечено Владом и как указано aragaer,), вы можете попробовать использовать что-то вроде:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt

Так, например, если ваш входной файл выглядел примерно так (обратите внимание на :80):

127.0.0.1
128.0.0.0:80
121.121.33.111

Конечный результат будет выглядеть примерно так:

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

Ответ 2

Если вы хотите добавить текст в конце каждой строки на месте (в том же файле), вы можете использовать параметр -i, например:

sed -i'.bak' 's/$/:80/' foo.txt

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

Итак, вы можете использовать ex (что эквивалентно vi -e/vim -e):

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

который добавит :80 к каждой строке, но иногда он может добавить его в пустые строки.

Таким образом, лучший способ - проверить, действительно ли строка содержит любое число, а затем добавить его, например:

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

Если файл имеет более сложный формат, подумайте об использовании правильного регулярного выражения, а не [0-9].

Ответ 3

sed 's/.*/&:80/'  abcd.txt >abcde.txt

Ответ 4

Краткая версия команды sed:

sed -i s/$/:80/ file.txt

Объяснение:

  • sed s tream ed itor
    • -i i n-place (редактировать файл на месте)
    • s команда s
    • /replacement_from_reg_exp/replacement_to_text/ выражение
    • $ соответствует концу строки (replace_from_reg_exp)
    • :80 текст, который вы хотите добавить в конце каждой строки (replace_to_text)
  • file.txt имя файла

Ответ 5

Используя текстовый редактор, проверьте в ^M (control-M или возврат каретки) в конце каждой строки. Сначала вам нужно удалить их, а затем добавить дополнительный текст в конце строки.

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt

Ответ 6

sed -i 's/$/,/g' foo.txt

Я делаю это довольно часто, чтобы добавить запятую в конец вывода, чтобы я мог легко скопировать и вставить ее в массив Python (или ваш любимый язык)